题意模拟题----超级大水题
思考:该题是一个思维题,二维数组且只有两行,且数与数之间能交换的,观察案例寻找规律
思路:用a,b,c分别存数组余数为0,1,2的个数
为了相邻两个数不能被3整数,也就等价于相邻两个数的余数不能都为0 且 相邻两个数的余数不能是一个为1与一个为2
1 | 0 | 0 | 2 | 2 | 2 | ||||
1 | 1 | 0 | 0 | 2 | 2 |
我们用一个表模拟一下:
也就0与0必须为类似对角线的位置关系
1与2要被0隔开
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int T; scanf("%d",&T); while(T--) { int n,x; int a=0,b=0,c=0; scanf("%d",&n); for(int i=0;i<2*n;i++) { scanf("%d",&x); if(x%3==0) a++; if(x%3==1) b++; if(x%3==2) c++; } if(a>n) printf("NO\n"); else{ if(a<=1) { if(b!=0&&c!=0) printf("NO\n"); else printf("YES\n"); } else if(a==2) { if(b%2==1&&c%2==1) //b,c为0也考虑了 printf("YES\n"); else printf("NO\n"); } else { printf("YES\n"); } } } }