1 条题解
-
0
自动搬运
来自洛谷,原作者为

EndeavourCHN
3068364094搬运于
2025-08-24 23:13:04,当前版本为作者最后更新于2025-04-15 13:19:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
审核辛苦了喵~
蒟蒻的第一篇题解!
思路
题意表述很清晰了,一共有 种中奖情况,由于数据量不大,直接每种情况枚举检测即可。
注意到一次抽奖最多只能获得一次积分,如果同时命中多个奖项,以积分最大的那个奖项为准。于是优先判断 分的情况,如果 分没中奖再判断 分的。
代码
#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; }
- 1
信息
- ID
- 11996
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者