首页 > 其他分享 >CF1714E 1400

CF1714E 1400

时间:2023-03-09 10:25:07浏览次数:37  
标签:20 puts int long 倍数 CF1714E return 1400

题意

解析


由图得 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

相关文章