题目链接:
Problem - 2259B - Codeforces
我的解答
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stdio.h> using namespace std; int main() { int t; cin >> t; int jishu = 0, oushu = 0; while(t--) { int n; cin >> n; int arr[3] = { 0 }; while (n--) { int x; cin >> x; if (x % 2 != 0) arr[1]++; else { if ((x % 4) == 0) arr[2]++; else arr[0]++; } } int max = arr[0]; for (int i = 0; i < 3; i++) { if (arr[i] > max) max = arr[i]; } cout <<max << '\n'; } return 0; }思路:
可以发现,将操作次数拉至无限大时,所有数都只会剩下:0,1,2
然后奇数最后结果一个为1,且不只要为1,以后永远为1
但偶数又得分两种情况讨论:
我这一轮是2,但下一轮可能就是0了
其他的偶数可能都不同步,出现了“摇摆”
这也是不能暴力只分奇数偶数来做的原因
如何判断一个偶数属于2还是0系列
就要mod4
最后看看哪一组数最多就好了
这就是代码整体思路
除了我可能写得比较臃肿之外,也是最优解了