题解:P12140 [蓝桥杯 2025 省 A] 抽奖
EndeavourCHN · · 题解
审核辛苦了喵~
蒟蒻的第一篇题解!
题目传送门
思路
题意表述很清晰了,一共有
注意到一次抽奖最多只能获得一次积分,如果同时命中多个奖项,以积分最大的那个奖项为准。于是优先判断
代码
#include <bits/stdc++.h>
using namespace std;
int A = 1, B = 1, C = 1, pts; //记录当前三个转盘的图案,以及累计积分
int n, a[1024], b[1024], c[1024]; //记录三个转盘上的所有图案
int m, x1[1024], x2[1024], x3[1024]; //记录每次转动转过了几个图案
//对应题干第一种中奖情况
bool check1 (int p, int q, int r){
if (p == q && q == r) return true;
return false;
}
//对应题干第三种中奖情况
bool check2 (int p, int q, int r){
if (q == p + 1 && r == q + 1) return true;
return false;
}
//对应题干第二种中奖情况
bool check3 (int p, int q, int r){
if (p == q || q == r || p == r) return true;
return false;
}
//对应题干第四种中奖情况
bool check4 (int p, int q, int r){
if(q == p + 1 && r == q + 1) return true;
if(r == p + 1 && q == r + 1) return true;
if(p == q + 1 && r == p + 1) return true;
if(r == q + 1 && p == r + 1) return true;
if(p == r + 1 && q == p + 1) return true;
if(q == r + 1 && p == q + 1) return true;
return false;
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int i = 1; i <= n; i++){
cin >> b[i];
}
for(int i = 1; i <= n; i++){
cin >> c[i];
}
cin >> m;
for (int i = 1; i <= m; i++){
cin >> x1[i] >> x2[i] >> x3[i];
}
for (int i = 1; i <= m; i++){
A += x1[i];
B += x2[i];
C += x3[i];
A %= n;
B %= n;
C %= n; //考虑到转盘转过的角度可能超过一圈,避免溢出
if (A == 0) A = n;
if (B == 0) B = n;
if (C == 0) C = n; //0索引为空,重新定向至n索引
//依次判断各中奖情况
if (check1(a[A], b[B], c[C])){
pts += 200;
continue;
}
else if (check2(a[A], b[B], c[C])){
pts += 200;
continue;
}
else if (check3(a[A], b[B], c[C])){
pts += 100;
continue;
}
else if (check4(a[A], b[B], c[C])){
pts += 100;
continue;
}
}
cout << pts; //输出答案
return 0;
}