Codeforces Round #811 (Div. 3) E. Add Modulo 10(数学)

https://codeforces.com/contest/1714/problem/E

给你一个n个整数的数组a1,a2,…,an
您可以任意多次应用以下操作:

选择一个索引i (1≤i≤n)并用值ai+(ai mod 10)替换元素ai的值,其中ai mod 10是整数ai除以10的余数。
对于单个索引(值I),该操作可以应用多次。如果操作重复应用于相同的索引,则每次都考虑ai的当前值。例如,如果ai=47,那么在第一次运算之后,我们得到ai=47+7=54,在第二次运算之后,我们得到ai=54+4=58。

检查是否有可能通过应用多个(可能是零个)运算使所有数组元素相等。
input
10
2
6 11
3
2 18 22
5
5 10 5 10 5
4
1 2 4 8
2
4 5
3
93 96 102
2
40 6
2
50 30
2
22 44
2
1 5
output
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
  • 这个题目可以通过模拟数据得到
    个数是5的时候只能加1次5,从而得到它的最大值
    个数是0的时候它自己就是最大值了
    所以0和5在一起讨论
    这是第一类

  • 当个数是1的时候,1 2 4 8 6 (2 4 8 6)依次循环
    当个数是3的时候3 6 2 4 8 (6 2 4 8)依次循环
    当个数是7的时候7 4 8 6 2(4 8 6 2)依次循环
    当个数是9的时候9 8 6 2 4 (8 6 2 4)依次循环

  • 可以看到除了0和5之外的这些,他们都可以走上2 4 8 6的循环道路
    这样我们只需要把它们通通统一变成2 4 8 6其中一个个数就行啦,为了最小的时间复杂度
    我们可以把他们都变成以2为个数的数
    这就是第二类

  • 需要注意的是2 22之间才能变化,因为中间需要留有一个位置给6变换,所以之间的余数必须是20的倍数

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N=500500;
int a[N];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int T=1;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        map<int,int> mp;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            if(a[i]%10==5) a[i]+=5;
            mp[a[i]%10]++;
            if(a[i]%10!=5&&a[i]%10!=0)
            {
                while(a[i]%10!=2)
                {
                    a[i]+=a[i]%10;
                }
            }
        }
        sort(a+1,a+1+n);
        if(mp[0]==n)
        {
            if(a[1]==a[n]) cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
        else
        {
            bool flag=true;
            for(int i=1;i<n;i++)
            {
                if((a[i+1]-a[i])%20!=0)
                {
                    flag=false;
                    break;
                }
            }
            if(flag==true) cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
    }
    return 0;
}

这题真的可惜,昨晚给我写假了,还没改出来
【傻狗哭泣】

posted @ 2022-08-02 15:00  高尔赛凡尔娟  阅读(166)  评论(0编辑  收藏  举报