CF1714E 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;
}
posted @   Isaac233  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示