题意
解析
由图得 a中不能同时存在 5 的倍数和非 5 的倍数。
若全为 5 的倍数,将她们的末尾全部操作为 0,判断相等即可。
若全非 5 的倍数,将她们的末尾全部操作为 2。由于2→4→8→6→2 绕一圈后原数会 +20,所以我们判断这些数是否 mod 20 同余即可。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10,M = 1e6 + 10;
int t,n,m,a[N],b[N],s[N],l;
int lei(int x){
if(x == 3 || x == 6 || x == 7 || x == 9) return 1;
return 2;
}
bool check(){
// 3 || 6 || 7 || 9
// 2 || 1 || 4 || 8
for(int i=2;i<=n;i++){
if(lei(a[1]%10) == lei(a[i]%10)){
// cout << lei(a[1]%10) << ":" <<lei(a[i]%10)<<" ";
if(abs(a[i]/10 - a[1]/10) % 2 == 1) return false;
}else{
if(abs(a[i]/10 - a[1]/10) % 2 == 0) return false;
}
}
return true;
}
int main(){
cin >> t;
while(t--){
scanf("%d",&n);
int x = 0,y = 0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i] % 10 == 5 || a[i] % 10 == 0) y = 1;
else x = 1;
}
if(x && y){
puts("NO");
}else if(x){
if(check()) puts("YES");
else puts("NO");
}else{
int flag = true;
for(int i=1;i<=n;i++){
if(a[i]%10==5) a[i]+=5;
if(i>1&&a[i]!=a[i-1]) flag = false;
}
if(flag) puts("YES");
else puts("NO");
}
}
return 0;
}
标签:20,puts,int,long,倍数,CF1714E,return,1400
From: https://www.cnblogs.com/dtdbm/p/17197356.html