首页 > 其他分享 >[Codeforces] CF1714E Add Modulo 10

[Codeforces] CF1714E Add Modulo 10

时间:2023-11-24 20:48:26浏览次数:37  
标签:10 26 Modulo 58 54 52 Add 86

题目传送门

代码一遍AC真的很爽,样例都是一遍过

题意

每个测试点含多组测试数据。

对于每组测试数据

第1行 一个整数 \(n\) ,表示该数据个数

第2行 \(n\) 个整数,你需要判断是否符合题意的数据

对每组数据,你可以对其作若干次(可以为零)如下操作:

选取数据中的一个数 \(a_i\) 将其替换为 \(a_i + (a_i \bmod 10)\)

问经过若干次变换后,该组数据能否全部相同

思路

首先让我们写段代码来枚举10个个位数在进行\(a_i+(a_i \bmod 10)\)后的情况

将其相同的数字对齐得到:

 0: [0 for ever]
 1: 2 4 8 16 22 24 28 36 42 44 48 56 62 64 68 76 82 84 88 96 102 
 2:   4 8 16 22 24 28 36 42 44 48 56 62 64 68 76 82 84 88 96 102 
 3:        6 12 14 18 26 32 34 38 46 52 54 58 66 72 74 78 86 92 94 98 106 
 4:     8 16 22 24 28 36 42 44 48 56 62 64 68 76 82 84 88 96 102 
 5: 10 
 6:          12 14 18 26 32 34 38 46 52 54 58 66 72 74 78 86 92 94 98 106 
 7:             14 18 26 32 34 38 46 52 54 58 66 72 74 78 86 92 94 98 106 
 9:                18 26 32 34 38 46 52 54 58 66 72 74 78 86 92 94 98 106 

我们会发现,一些数字进行若干次操作后会变得相同,所以将其归类:

 3: 6 12 14 18 26 32 34 38 46 52 54 58 66 72 74 78 86 92 94 98 106 
 6:   12 14 18 26 32 34 38 46 52 54 58 66 72 74 78 86 92 94 98 106 
 7:      14 18 26 32 34 38 46 52 54 58 66 72 74 78 86 92 94 98 106 
 9:         18 26 32 34 38 46 52 54 58 66 72 74 78 86 92 94 98 106 

 0: [ 0 for ever]
 5: [10 for ever]

 1: 2 4 8 16 22 24 28 36 42 44 48 56 62 64 68 76 82 84 88 96 102
 2:   4 8 16 22 24 28 36 42 44 48 56 62 64 68 76 82 84 88 96 102 
 4:     8 16 22 24 28 36 42 44 48 56 62 64 68 76 82 84 88 96 102 
 8:       16 22 24 28 36 42 44 48 56 62 64 68 76 82 84 88 96 102 

我们可以发现,同一个类别内的数一定可以通过若干次操作变得相等,但是不同类别的数字就不行

那,该怎么判断类别呢?

通过观察,可以发现第一类中,当十位为奇数,那么只要个位不是6的偶数就一定存在;而当十位为偶数,则只有个位为6的数存在

相对的,在第三类,十位为偶数时,只要个位不是6的偶数就一定存在;十位为奇数时,只存在末尾是6的偶数

可是,这样只能判断偶数属于哪一类,对奇数没用,该怎么办呢?

不难发现,奇数操作一次后一定是偶数,所以只需要再判断奇数操作后变为的偶数存在于哪一类即可

最终,只需要统计出三类对应的数对应的出现次数就好

代码

如果有两个及以上的类别都出现了,那么说明是变不成的

需要注意,即使只出现了第二类,但是它们不管怎么变,最多只能\(+5\),所以需要再进行一下特判

#include<bits/stdc++.h>
using namespace std;

const int maxn=2e5+10;
int a[maxn];
int n;
int kind1,kind2,kind3;

void run()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]+=(a[i]%2==0?0:a[i]%10);
        if(a[i]%10==0) kind2++;
        else if(((a[i]%100)/10)%2==1) 
        {
            if(a[i]%10==6) kind3++;
            else kind1++;
        }else
        {
            if(a[i]%10==6) kind1++;
            else kind3++;
        }
    }
    
    int l=(kind1>0)+(kind2>0)+(kind3>0);
    if(l==2 || l==3) cout<<"NO";
    else
    {
        if(kind1>0 || kind3>0) cout<<"YES";
        else
        {
            int num=a[1],find=1;
            for(int i=1;i<=n;i++)
            {
                if(a[i]!=num)
                {
                    find=0;
                    break;
                }
            }
            cout<<(find?"YES":"NO");
        }
    }
    cout<<endl;
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        kind1=kind2=kind3=0;
        run();
    }
    return 0;
}

标签:10,26,Modulo,58,54,52,Add,86
From: https://www.cnblogs.com/lyk2010/p/17854721.html

相关文章

  • P1002 [NOIP2002 普及组] 过河卒
    [NOIP2002普及组]过河卒题目描述棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点。卒行走的规则:可以向下、或者向右。同时在棋盘上\(C\)点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,\(A\)点\((0......
  • [Luogu] P7910 [CSP-J 2021] 插入排序
    [CSP-J2021]插入排序-洛谷昨天下午爆肝一下午都没整出来(悲是我太菜了思路第一种想法,暴力即,每次修改操作后重新维护整个数组,时间复杂度\(O(Qn^2)\),能拿52pts但是,想要拿满分,很简单,只需要把排序的双层循环\(n^2\)变为\(n\)即可因为冒泡是对每个点都进行枚举,但是需要修改的......
  • [Deeplearning] 20210919小学组 取数游戏
    首先明确一下贪心策略:两人必然会从大往小取当自己无法得分时,最优策略就是不让对方得分当自己可以得分时,得分所以,最后只需要便利数组,当A或B能得分时便得分,不能得分就不得分,但是不管能否得分都需要将最大的数取出代码:#include<bits/stdc++.h>usingnamespacestd;intn,a[......
  • Win10 添加或删除功能时报错:0x80073701,找不到引用的汇编 (ERROR_SXS_ASSEMBLY_MISSING
    问题描述:当通过控制面板或DISM命令或PowerShell命令Enable-WindowsOptionalFeature修改Windows功能时,可能会遇到此报错,导致功能修改失败。关于这个问题的来源,英文版的错误信息很明确:ERROR_SXS_ASSEMBLY_MISSING,有SXS组件找不到,中文机翻痕迹明显,压根看不懂是啥意思。如果你是......
  • 10.配置优先级,bean的管理,SpringBoot原理
    配置优先级,bean的管理,SpringBoot原理配置优先级:优先级(低->高):application.ymlapplication.ymlapplication.propertiesjava系统属性(-Dxxx=xxx)命令行参数(--xxx=xxx)例子-设置springboot项目端口号:java系统属性:-Dserver.port=9000命令行参数:--server.por......
  • KubeSphere 社区双周报 | Fluent Operator 2.6.0 发布 | 2023.11.10-11.23
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.11.10-2023.11.23。贡献者名单新晋KubeSphereCont......
  • Codeforces Round 910 (Div. 2)
    CodeforcesRound910(Div.2)A.MilicaandString解题思路:统计给定字符串\(s\)中的\(B\)的数量,记录为\(cnt\)。如果\(cnt==k\):输出0;如果\(cnt<k\):从左往右数,将第\(cnt-k\)个\(A\)的位置前的数全部变成\(B\).如果\(cnt>k\):从左往右数,将第\(k-cnt\)个\(B\)的......
  • error:0308010C:digital envelope routines::unsupported
    执行:npmrunserve 出现:error:0308010C:digitalenveloperoutines::unsupported原因:npm版本升级解决:package.json增加配置"scripts":{"serve":"setNODE_OPTIONS=--openssl-legacy-provider&&vue-cli-serviceserve","b......
  • 处理一张图片生成10个子图片,而且读取语义文本,比如'red hat'
    完成了,对两个函数的重构,放入了imagebox.py文件中我从博客的文章日志,继续处理twitter数据集,重构代码。正向反馈,提高效率。重构save_10_boximg函数1.添加im_file参数2.添加生成boxlist的流程,目的是,让接口只需要调用save_10_boximg函数,就可以完成对子图片的提取。这样就可以为下一步提......
  • Top 10 Strong Earthquakes in the World
    ChileEarthquake(M=9.5)in1960inminutesputmore2millionspeopleinlostliveorhomesAlaskaEarthquake(M=9.2)in1964RussianEarthquake(M=9.0)in1952JapanEarthquake(M=9.0)in2011,2000peoplediedinminutesIndonesianEarthquake......