Add Modulo 10(数论,思维,数学,规律)

思路:找规律
情况一: 尾数为5或0

为5时进行一次操作变成0的情况。
而尾数是 0 时操作无意义,所有数必须相等。
情况二:尾数为 1,3,7,9
可进行一次操作变成情况三。
情况三:尾数为 2,4,6,8
我们通过找规律发现:

2481622
48162224
612141826
816222428

 

每个数可以转换为它自己 +20 的数,我们可以让每个数加足够多的 20,所以不妨 mod20 再进行比较。

而我们把尾数统一(比如都变成 2)之后,2 和 12 再也不能变成相同的了,所以这时全相等就相当于符合要求。

可以开$set$来进行判断:

//Add Modulo 10:https://www.luogu.com.cn/problem/CF1714E
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int res,n,m,k,t;
set<int>s;
int main()
{
    cin>>t;
    while(t--){
        cin>>n;
        s.clear();
        for(int i=0;i<n;i++){
            cin>>k;
            if(k%2) k=k+k%10;
            if(k%10) k=k%20;
            s.insert(k);
        }
        set<int>p;
        for(auto i:s)
        {
            if(i%10!=0){
                if(i%10==4) i=(i+18)%20;
                else if(i%10==6) i=(i+6)%20;
                else if(i%10==8) i=(i+14)%20;
            }
            p.insert(i);
        }
        if(p.size()==1) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

 

posted @ 2023-06-20 11:47  o-Sakurajimamai-o  阅读(52)  评论(0)    收藏  举报
-- --