Codeforces Round #698 (Div. 2)A-D题解

Codeforces Round #698 (Div. 2)(A ~ F)6题全,超高质量题解)【每日亿题】2021/2/4 整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录【每日亿题2/4】Codeforces Round #698 (Div. 2)(A ~ F)6题全,超高质量题解)A - Nezzar and Colorful BallsB - Nezzar and Lucky NumberC - Nezzar and Symmetric ArrayD - Nezzar and BoardE - Nezzar and Binary StringF - Nezzar 阅读详情

比赛链接:https://codeforces.com/contest/1478

A题
贪心

题意:
给定长度为n的递增的整数数列,问对每个数字都染上一种颜色,使得每个颜色的数字拿出来都是单调递增的。
问最少需要几种颜色。

本来这个问题是个LIS问题,然而给定的数列已经递增的了。就变成了一个沙比题
对于每个数字来说,如果它出现了cas次,由于单一颜色的数字是严格单调递增的,所以这个cas个数字都要被染上不同的颜色。
所有数字的出现次数cas,取最大的那个就是答案。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int main()
{
    IOS
    int t;
    cin>>t;
    while(t--)
    {
        int n;cin>>n;
        int num[107];
        int ans=0;
        int cas=0;//cas保存到当前位置位置,当前这个数出现了几次
        for(int i=0;i<n;i++)
        {
            cin>>num[i];
            if(i&&num[i]==num[i-1]) cas++;
            else cas=1;
            ans=max(ans,cas);
        }
        cout<<ans<<endl;
    }
}

B题
构造,贪心,暴力

题意:
给定一个一位正整数d。
然后给定若干正整数ai,询问ai是否能用若干个十进制表示下至少有一位包含d的整数相加得到。

这里先推得一个简单的结论,如果ai>=10d的话,ai必定能按照上述要求得到。
首先如果ai<=10d+9,那ai自身就带了一个d,因此直接可以用单个ai相加得到。
如果ai>10d+9,那么ai可以表示成(10d+x)+(y+d),其中x的十位为0,y的个位为0,由于ai>10d+9,
故(10d+x)+(y+d)>10d+9即x+y>9-d,即x+y为一个整数z。
x的十位不能为0,y的个位不能为0,那么我们把z的十位丢给y,个位丢给x,其他位随意分配给x和y都可。故必定存在满足要求的10d+x和y+d。

当ai<10d的时候,这时我们已经不可能在除了个位外的地方放置整数d了。
我们直接枚举十位选择了什么数字记为k,判断ai-10k是否能被d整除即可。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int main()
{
    IOS
    int t;
    cin>>t;
    while(t--)
    {
        int n,d;cin>>n>>d;
        while(n--)
        {
            int x;cin>>x;
            if(x>=d*10) cout<<"YES"<<endl;
            else
            {
                bool flag=0;
                for(int i=0;i<10;i++)//暴力枚举十位用了什么数字
                {
                    int temp=i*10;
                    if(x>temp&&(x-temp)%d==0) flag=1;//如果能整除则存在
                }
                if(flag) cout<<"YES"<<endl;
                else cout<<"NO"<<endl;
            }
        }
    }
}

C题
相关tag:数学

题意:
给定一个正整数n,给定2n个两两不相同的整数,其中每一个整数它的相反数都必定包含在这2n个整数里。每个值与其它2n-1个数的差的绝对值累加起来,记作x。
现在给定这2n个整数的x,让你判断这2n个x是否是合理的,也就是说能否找到一组2n个两两不相同的整数,可以得到给定的这2n个x。

我们如果把这2n个数全部放到数轴上(代码实现时需要排序)。我们只看原点右侧的部分,以x1点为标准。
从x1点移动到x2点,这一段的左侧有5个点,右侧有3个点,每移动一个长度单位,左侧的点的距离和+5,右侧点的距离和-3,总距离和+2。因此x1点移动到x2点所增加的总距离就为2×\times×d2。
可以继续推广,从xi点到xi+1点,其距离为di,则总距离增加量为2i×\times×di,也就是说这两点的总距离的差值,需要能被2i整除(且不为0)。
在这里插入图片描述
由此我们可以计算出x2,x3…xn到x1的距离,并借由此计算出x1与原点的距离(同样要满足可整除,且不小于等于0),从而判断是否存在解。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=1e5+7;

ll num[2*maxn];
ll now=0;

int main()
{
    IOS
    int t;
    cin>>t;
    while(t--)
    {
        int n;cin>>n;n*=2;
        for(int i=0;i<n;i++) cin>>num[i];
        sort(num,num+n);
        bool flag=1;
        int now=0;
        for(int i=1;i<n;i+=2)
        {
            if(num[i]!=num[i-1]) flag=0;//需要对应相等
            num[now++]=num[i];//只需要保留一半的数就够了
        }
        ll sum=0;//记录不计算 x轴正轴上,从左往右看(下面的点都这么看)的第1个点,在不计算自身到原点这段距离的情况下其他点产生的距离和
        for(int i=1;i<now;i++)//now即n/2,最开始的n值
        {
            ll mod=i*2;//从第i个点移动到第i+1个点,每移动一个长度会增加2i的总距离
            ll dis=num[i]-num[i-1];
            if(dis==0||dis%mod) {flag=0;break;}//如果无法整除增加的长度或者点重合了都是不满足的情况
            else sum+=dis/mod*2*(now-i);//当前这一段会被计算2*(now-i)次
        }
        sum=num[0]-sum;//依靠剩余的sum值计算第一个点和原点的距离
        if(sum%n||sum<n) flag=0;//该距离会被计算2n(这里的n在最开始已经*2了)次,因此要被2n整除且距离不为0
        if(flag) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
}

D题
相关tag:数学,结论

题意:
给定n个整数xi。
每次操作你可以在原有的整数里挑选两个数x和y,把2x-y的值加入到这些整数里。
问是否能在若干次操作后,得到整数k。

这里需要注意到,每次操作是2x-y。
多次计算之后的数用原有的xi表示,可以表示为k1×\times×x1+k2×\times×x2+…kn×\times×xn。
我们把k1+k2+…+kn算出来记为K。
最开始的时候,xi的K值都为1。
经过一次2x-y的运算后,得到的数K值仍然为1,因为1 ×\times× 2-1=1。
也就是说如果我们当前的数的K值如果都为1,经过2x-y操作后的得到的新数的K也仍为1。

利用归纳法可以得到,我们得到的数的K值只能为1。
那么也就是说,我们能表示的数是由某一个xi,加上任意系数组合的 x两两之间的差值得到的。
这某一个xi我们可以枚举。
而后面任意系数组合的 x两两之间的差值,他们的最大公约数gcd是他们可以被分割得到的最小绝对值的数。也就是说他们能表示的数,只有gcd的整数倍。
我们可以通过计算这些数差值的最大公约数,得到这个最小块。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=2e5+7;

ll num[maxn];
int n;
ll k;

ll gcd(ll a,ll b)
{
    return b?gcd(b,a%b):a;
}

int main()
{
    IOS
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        bool flag=0;
        for(int i=0;i<n;i++)
        {
            cin>>num[i];
            if(num[i]==k) flag=1;//如果输入的值已经是k了就没必要进行后续部分
        }
        if(!flag)
        {
            vector<ll>cas;
            for(int i=1;i<n;i++) cas.push_back(abs(num[i]-num[i-1]));//相邻两个数之间的差值
            for(int i=1;i<cas.size();i++) cas[0]=gcd(cas[0],cas[i]);//求取差值的最大公约数
            //即利用所给的这些数作差,任意组合后能得到的最小一块的值是多少
            for(int i=0;i<n;i++)
            {
                ll temp=k-num[i];//枚举除了差值之外,多余的那一个数是哪一个
                if(temp%cas[0]==0) flag=1;
            }
        }
        if(flag) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
}
Codeforces Round #698 (Div. 2) D. Nezzar and Board(一步步推出来,超级清晰,不猜结论,看不懂来打我 ~ 好题 ) 一步步推出来,超级清晰,不猜结论,看不懂来打我 ~ 每一步都有详细的解释,超级清楚简单! 阅读详情

相关推荐

USB 3.0 Rx Detect之超速U盘的识别

USB 3.0 Rx Detect之超速U盘的识别

汽车以太网和SOA 2万+

第十三届蓝桥杯大赛软件赛省赛 C/C++ 【数的拆分】

【问题描述】 给定 T 个正整数 ai,分别问每个 ai 能否表示为 x1y1*x2y2的形式,其中 x1, x2为正整数,y1, y2 为大于等于 2 的正整数。 【输入格式】 输入第一行包含一个整数 T 表示询问次数。 接下来 T 行,每行包含一个正整数 ai 。 【输出格式】 对于每次询问, 如果 ai 能够表示为题目描述的形式则输出 yes,否则输出 no 。 【样例输入】 7 2 6 12 4 8 24 72 【样例输出】 no no no yes yes no yes 【评测用例规模与约定】 对

m0_59746092的博客 2171

在统信UOS Server 20上踩坑记:手把手教你搞定openGauss 5.0.0企业版安装(附常见报错解决方案)

本文详细记录了在统信UOS Server 20上安装openGauss 5.0企业版的实战经验,包括环境准备、依赖库问题、目录权限、内存参数调优等常见问题的解决方案。通过伪装系统标识、建立软链接、调整内存参数等方法,成功克服国产操作系统与企业级数据库的兼容性挑战,为开发者提供了一份深度排雷指南。

weixin_28698059的博客 263

基础数论算法刷题笔记

数论的题目,首先分析题目的意思,分解成数论相关的模型接着,思路往自己学过的数论知识上靠——质因子、质数、最大公约数辗转相除法、辗转相乘法、公因数。

qq_61786525的博客 1223

Shopee 虾皮API接口:商品详情采集的实践

随着电商行业的蓬勃发展,数据采集和分析在商业决策中扮演着越来越重要的角色。Shopee作为东南亚领先的电商平台,拥有大量的商品数据。通过Shopee的API接口,我们可以方便地获取商品详情,为数据分析和市场研究提供有力支持。本文将介绍如何使用Shopee API接口采集商品详情,并分享一些实践技巧。提供了丰富的数据接口,包括商品详情、店铺信息、订单数据等。通过API接口,开发者可以轻松地获取Shopee平台上的数据,进行进一步的处理和分析。Shopee API接口:商品详情采集的实践与技巧。

An4480的博客 1886

基于STM32L4XX、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 公式: Voltage = (adc_value / (2^23 - 1)) * Vref。// 模式控制位[7:5]=000 (连续转换模式)// 3.2 配置通道0,使其使用AIN0(+)和AIN1(-),并关联到配置0和滤波器0。= 0x14) { // AD7124-8的ID是0x14。// 双极性操作,缓冲AINP/AINN。

zhusl6688的博客 376

LQ0019 数的拆分【素数】

题目描述 给定T个正整数a,分别问每个ai能否表示为x1^y1^·x2^y2^的形式。 其中x1、x2为正整数,y1、y2为大于等于2的正整数。 输入格式 输入第一行包含一个整数T,表示询问次数。 接下来T行,每行一个正整数ai。 10% 的评测用例,1 ≤ T ≤ 200,ai ≤ 10^9; 30% 的评测用例,1 ≤ T ≤ 300,ai ≤ 10^18; 60% 的评测用例,1 ≤ T ≤ 10000,ai ≤ 10^18;

海岛Blog 1175

1. BES2700ZP概述

恒玄BES2700采用RTX5操作系统,配合mindmics算法或者自研算法。

雪飞_海 4467

Codeforces Round #698 (Div. 2) D. Nezzar and Board

D. Nezzar and Board 题目链接: http://codeforces.com/contest/1478/problem/D Description Input Output 题意 给一个数列,a1a_1a1​,a2a_2a2​,a3a_3a3​…ana_nan​ , 每一次操作定义为,从已有的数字中随意选一个数字作为x,再选一个数字作为y,两个数字可以相同,然后向数列中加入2*x - y 这个数字,选中的数字仍然在数列中。 可以操作任意次,问是否能凑出k。 题解: 首先考虑最终组成的

lajiyuan的博客 2668

pytest学习和使用19-pytest断言失败后,怎样保持后续的断言继续执行?(pytest-assume)

【代码】pytest学习和使用19-pytes断言失败后,怎样保持后续的断言继续执行?

虫无涯的博客 1390

利用ADS建立MIPI D-PHY链路仿真流程

由于MIPI D-PHY的速率并不算高,因此,PCB设计难度通常不大,主要做好差分线的等长、阻抗的连续性、端口处的阻抗优化以及控制好走线的长度,拿到满意的结果还是较为轻松的,最后,建立流程化的仿真工程文件,可以保存为模板,方便日后的设计复用,非常方便。

一只豌豆象的博客 3571

Codeforces Round #698 (Div. 2) A~F

A. Nezzar and Colorful Balls 题目传送门: A. Nezzar and Colorful Balls 思路: 水题,找到最多有多少个数是形同的即可。 AC Code #include<bits/stdc++.h> using namespace std; int a[105]; int main() { int t; scanf("%d",&t); while(t--) { int n; scan

稚始稚终的博客 1321

【AUTOSAR-CanNM】-3.1-如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)

如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)

「汽车电子助手」的博客 4724

Codeforces Round #698 (Div. 2)部分题解(A,B,C,D)

oj: CodeForces 叙述采用倒叙。 D. Nezzar and Board oj: CodeForces 还在写,稍等片刻 C. Nezzar and Symmetric Array oj: CodeForces 题意 aaa 数组是一个由 2n2n2n 个互不相同的整数组成的数组,且每个 aia_iai​ 都能找到一个 aja_jaj​ 满足 ai=−aja_i=-a_jai​=−aj​。ddd 数组是 di=∑j=12n∣ai−aj∣d_i=∑^{2n}_{j=1}|a_i−a_j.

画船听雨眠 1716

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Codeforces Round #698 (Div. 2)-C. Nezzar and Symmetric Array-题解

目录C. Nezzar and Symmetric Array题目大意解题思路首先原数组中,一个数的差值和 与 这个数的相反数的差值和 是相同的。这就需要 *条件一* 差值和们 成对出现因±差值和相同,故先只研究正值这就需要 *条件二* 差值和都为偶数并且由此,我们可以分别计算出每一个原来的数。*条件三* 原来的数是整数(可以整除)*条件四* 原来的数各不相同这就需要 *条件五* 计算过程中的数都是正数总结AC代码结语 C. Nezzar and Symmetric Array 题目大意 原来有2n个数,

<font color="Pink">Tisfy的博客</font> 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Codeforces Round #698 (Div. 2) - B. Nezzar and Lucky Number 题解

Codeforces Round #698 (Div. 2)-B. Nezzar and Lucky Number 传送门 Time Limit: 1 second Memory Limit: 512 megabytes Problem Description Nezzar’s favorite digit among 1,…,91,\ldots,91,…,9 is ddd. He calls a positive integer lucky if ddd occurs at least once in i

<font color="Pink">Tisfy的博客</font> 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Codeforces Round #698 (Div.2) A,B,C,D,E

Codeforces Round #698 Div.2 A,B,C,DA - Nezzar and Colorful BallsCodeB - Nezzar and Lucky NumberCodeC - Nezzar and Symmetric ArrayCodeD - Nezzar and BoardCode A - Nezzar and Colorful Balls 输出序列中出现最多次数的个数。 Code #include "bits/stdc++.h" using namespace std;

狙击美佐的博客 485

[Codeforces Round #698 (Div. 2)] A-F题解

[Codeforces Round #698 (Div. 2)] A-F题解 A.Nezzar and Colorful Balls 思路: 贪心,等价求众数的次数 #include<bits/stdc++.h> #define lson p<<1,l,mid #define rson p<<1|1,mid+1,r #define ls p<<1 #define rs p<<1|1 using namespace std; typedef long

weixin_45539557的博客 327

Codeforces Round #698 (Div. 2)A,B,C,D,F

Codeforces Round #698 (Div. 2)前四题 A - Nezzar and Colorful Balls 题意 有 nnn 个球,第 iii 个球上的序号是 aia_iai​ ,保证对任意 aia_iai​ 都有 ai≤ai+1a_i \leq a_{i+1}ai​≤ai+1​ 。现在你要给球涂上颜色,保证在球按照颜色分开后,每种颜色的球序号从小到大是严格递增的,也就是只考虑某种颜色的球的情况下,对相邻的 aia_iai​、aja_jaj​,均有 ai<ai+1a_i \lt

tcy今天长胖了吗的博客 264

Codeforces Round #698 (Div. 2)

文章目录Codeforces Round #698 (Div. 2)A. Nezzar and Colorful BallsB. Nezzar and Lucky NumberC. Nezzar and Symmetric ArrayD. Nezzar and BoardE. Nezzar and Binary StringF. Nezzar and Nice Beatmap Codeforces Round #698 (Div. 2) A. Nezzar and Colorful Balls 题意: 给定

m0_49959202的博客 182

Codeforces Round #698 D. 裴蜀定理(数论)

Codeforces Round #698 D. 裴蜀定理 https://codeforces.com/contest/1478/problem/D 题意:有n个互不相同的数字在黑板上,多次重复如下操作:选取黑板上任意两个数x,y,(可以相同),将 2x-y 放回黑板上,(x,y依然存在),问经过无数次上述操作后,黑板上是否存在数字 k ? 思路: ​ 1:由观察可知,2x-y , 2(2x-y) - y, 2x-(2x-y) … 都有一个规律:系数和总是为 1 ​ 所以答案的标

m0_50796573的博客 320

补: Codeforces Round #698 (Div. 2)

补: Codeforces Round #698 (Div. 2) 喵喵喵,比赛太呆了!!! A题交错文件WA了一次,B题居然错在了一个小点上,错失了上大分的机会。 QwQ,下次一定! 文章目录补: Codeforces Round #698 (Div. 2)A - Nezzar and Colorful BallsB - Nezzar and Lucky Number A - Nezzar and Colorful Balls 求最长重复序列的长度。 #include<bits/stdc++

m0_51990674的博客 344

Codeforces Round #698 (Div. 2) A-E解题报告与解法证明

Codeforces Round #698 (Div. 2) A-E解题报告与解法证明 题目解法总体概括 A Nezzar and Colorful Balls #include <bits/stdc++.h> using namespace std; const int N = 110; int a[N], f[N]; int main() { int t; cin >> t; while (t -- ) { static int

weixin_45573921的博客 230

Codeforces Round #698 (Div. 2)全部题解

题目链接:https://codeforces.com/contest/1478 文章目录A.Nezzar and Colorful BallsB.Nezzar and Lucky NumberC.Nezzar and Symmetric ArrayD.Nezzar and BoardE.Nezzar and Binary StringF.Nezzar and Nice Beatmap A.Nezzar and Colorful Balls 贪心 题目大意为给数列中的数字上色,使得相同颜色的数字组成的序列位

qq_50808324的博客 685
上一篇: Codeforces Round #697 (Div. 3)A-G题解
下一篇: 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛)全题解
StandNotAlone
博客等级 码龄7年 338粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值