题解:P17220 [ICPC 2017 Nanning R] Rearrangement
这道题重要的不仅是判断的方法,判断的顺序也很重要。
1. 题意简述
给你一个
2. 思路分析
这种相加整除的问题肯定是从余数方面去考虑。因此,我们先把每种余数有多少个统计出来。
统计完余数,我们就要想如何判断了。可以发现
接下来我们思考,如果
容易发现
接下来要分成两种情况讨论。
情况一:
| 0 | |||
|---|---|---|---|
| 0 |
然后在两边分别放
情况二:
| 0 | 1 | 0 |
|---|---|---|
| 2 | 0 | 2 |
剩下的分别放在两侧就能满足条件了。
如果
其实这道题判断方法还是不难想的,但是由于判断顺序不能乱所以还是比较容易出错的。
3. AC 代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n;
int a[5][10005];
int ze,on,tw;
signed main(){
cin>>t;
while(t--){
cin>>n;
ze=0;
on=0;
tw=0;
for(int i=1;i<=2;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
a[i][j]%=3;
if(a[i][j]==0) ze++;
if(a[i][j]==1) on++;
if(a[i][j]==2) tw++;
}
}
if(ze>n){
cout<<"NO\n";
continue;
}
if(on==0||tw==0){
cout<<"YES\n";
continue;
}
if(ze<2){
cout<<"NO\n";
continue;
}
if(ze==2){
if(on%2==1&&tw%2==1){
cout<<"YES\n";
}else{
cout<<"NO\n";
}
}else{
cout<<"YES\n";
}
}
return 0;
}