CodeForces-1266A 题解

题目传送门

一道模拟题……

纯模拟肯定不行,考虑优化。60=22×3×560 = 2^2 \times 3 \times 5,也就是说我们判断组合后的数字能否被 22331010 整除即可。

如果这个数能被 22 整除,那么原数一定会存在偶数;如果这个数能被 33 整除,那么它的数字和应该也能被 33 整除;如果这个数能被 1010 整除,那么原数一定存在 00

值得注意的是,如果原数只出现过一个 00,那么该数是不能被 101022 同时整除的。因此,我们还需要判断一下原数是否有除了 00 以外的偶数或者 22 个以上的 00

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
#define ll long long
#define INF 1e9
using namespace std;
int n;
signed main() {
ios :: sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++) {
string s; // 不要用 int,否则会出错
int sum = 0, cnt1 = 0, cnt2 = 0; // sum 是数位和,cnt1 是 0 的个数,cnt2 是除了 0 以外的偶数的个数
bool flag1 = 0, flag2 = 0, flag3 = 0; // flag1 判断能否被 3 整除,flag2 判断能否被 10 整除,flag3 判断能够被 2 整除
cin >> s;
for (int i = 0; i < s.size(); i++) {
int num = s[i] - '0';
sum += num;
if (num == 0) cnt1++;
else if (num % 2 == 0) cnt2++;
}
if (sum % 3 == 0) flag1 = 1;
if (cnt1) flag2 = 1;
if (cnt2 or cnt1 > 1) flag3 = 1; // 如果有两个 0 也可以
if (flag1 and flag2 and flag3) cout << "red\n";
else cout << "cyan\n";
}
return 0;
}