记人生第一次参加Codeforces比赛

2022年4月30日14:33分,距离Codeforces Round #785 (Div. 2)开始还有两分钟。我在谷歌浏览器里面打开了网页,一个字都看不懂, 用nb的谷歌翻译搞出来以后是这样的:

确实可以看懂一些,但不得不承认这个翻译了跟没翻译差距不是很大。。。。

其实谷歌翻译已经很优秀了,如果你用QQ邮箱翻译CF发来的邮件,你会认为还不如不翻译。

已经两点49了,不断刷新CF,网页没有丝毫变化。

怀疑人生的我突然发现这个比赛时间是可以点开的。链接到载第三方网站 timeanddate.com

我恍然大悟。

时差。

众所周知CF是俄国人民发明的,因此肯定是以莫斯科时间为准啦

打乱了劳资一下午的安排

那么,我就先去做作业了。我们今天晚上再继续吧

但是呢,你以为真的是这样吗???????

终于到了晚饭时间,等了好久的我突然发现还是不对——

这中间有太多的阴差阳错,包括我开启了VPN等等。

CF与time and date使用的都是UTC(协调世界时),并且都会根据用户的IP地址判断其时区,并换算出其所在时区的比赛时间。那么北京所在的时区正好是UTC+8,因此真正的比赛时间应该是北京时间22点35分。其实CF的比赛都是周六这个时间啦

所以呢,由于我的粗心大意,此比赛不但打乱了我的下午安排,晚上吃饭睡觉的安排也被打乱了。不过既然都折腾到这个地步了,就继续折腾下去吧!

现在是22点28分,我好紧张啊。说实话CF的题我真的一道都没有做出来过,原文看不懂不说,连翻译都没能看懂。。。。。。

22点30分,报名此刻截止了。共有17986人参加。我报名时才九千多

我去上个厕所马上就回来

还有不到50秒就开始了!

Yes!

 好吧跟我说的是一模一样心态崩了 

  1. 爱丽丝和鲍勃正在玩弦乐游戏。比赛将进行 t 轮。在每一轮中,都会有一个由小写英文字母组成的字符串s。

    爱丽丝首先移动,两个玩家交替轮流。 Alice 可以删除任何偶数长度的子串(可能为空),Bob 可以从 s 中删除任何奇数长度的子串。

    更正式地说,如果有一个字符串 s=s1s2...sk,玩家可以选择一个长度为相应奇偶校验的子字符串 slsl+1...sr−1sr 并将其删除。之后,字符串将变为 s=s1…sl−1sr+1…sk。

    字符串变空后,回合结束,每位玩家计算本回合的得分。一个玩家的得分是他/她移除的所有角色的值的总和。 a 的值为 1,b 的值为 2,c 的值为 3,……,z 的值为 26。得分较高的玩家获胜。对于每一轮,确定获胜者以及获胜者和失败者得分之间的差异。假设两个玩家都打得最优化以最大化他们的分数。可以证明,平局是不可能的。

    输入
    输入的第一行包含一个整数 t (1≤t≤5⋅104),表示轮数。

    接下来的 t 行中的每一行都包含一个由小写英文字母组成的字符串 s (1≤|s|≤2⋅105),表示用于该回合的字符串。这里 |s|表示字符串 s 的长度。

    保证 |s| 的总和总轮次不超过 2⋅105。

    输出
    对于每一轮,打印一行包含一个字符串和一个整数。如果 Alice 赢得这一轮,则字符串必须是“Alice”。如果 Bob 赢得了回合,则字符串必须是“Bob”。整数必须是他们的分数之间的差,假设两个玩家都打得最好。

  2. 如果对于所有可能的三元组 (t,u,v) 使得 t 是 s 的非空子串并且 u 和 v 是 s 中存在的字符,那么我们称字符串 s 完美平衡,u 和 v 在t 不大于 1。

    例如,字符串 "aba" 和 "abc" 是完全平衡的,但 "abb" 不是,因为对于三元组 ("bb",'a','b'),条件不满足。

    给你一个字符串 s 仅由小写英文字母组成。你的任务是确定 s 是否完全平衡。

    如果 b 可以通过从 a 的开头删除一些字符(可能为 0)和从 a 的末尾删除一些字符(可能为 0)来获得,则字符串 b 称为另一个字符串 a 的子字符串。

    输入
    输入的第一行包含一个整数 t (1≤t≤2⋅104),表示测试用例的数量。

    接下来的 t 行中的每一行都包含一个字符串 s (1≤|s|≤2⋅105),由小写英文字母组成。

    保证 |s| 的总和在所有测试用例中不超过 2⋅105。

    输出
    对于每个测试用例,如果 s 是一个完美平衡的字符串,则打印“YES”,否则打印“NO”。

    您可以在任何情况下打印每个字母(例如,“YES”、“Yes”、“yes”、“yEs”都将被识别为肯定答案)。

  3. 给你一个正整数 n。 如果某个正整数 a 在颠倒其数字顺序后保持不变,则称其为不带前导零回文的整数。 找出将 n 表示为正回文整数之和的不同方式的数量。 如果至少一个回文整数的频率不同,则两种方式被认为是不同的。 例如,5=4+1 和 5=3+1+1 被认为是不同的,但 5=3+1+1 和 5=1+3+1 被认为是相同的。

    形式上,您需要找到总和等于 n 的正回文整数的不同多重集的数量。

    由于答案可能很大,因此以 109+7 为模打印。

    输入
    输入的第一行包含一个整数 t (1≤t≤104),表示测试用例的数量。

    每个测试用例包含一行输入,其中包含一个整数 n (1≤n≤4⋅104) — 所需的回文整数之和。

    输出
    对于每个测试用例,打印一个表示所需答案模 109+7 的整数。

  4. 很久以前,您想到了两个有限算术级数 A 和 B。然后您发现了另一个序列 C,其中包含 A 和 B 共有的所有元素。不难看出 C 也是有限算术级数。多年后,你忘记了 A 是什么,但记住了 B 和 C。出于某种原因,你下定决心要找到这个丢失的算术级数。在你开始这个永恒的搜索之前,你想知道有多少种不同的有限算术级数可能是你丢失的级数 A。

    如果两个算术级数的第一项、共同差或项数不同,则它们被认为是不同的。

    可能有无限多这样的级数,在这种情况下,您甚至不会尝试寻找它们!在所有这些情况下打印 -1。

    即使它们的数量有限,答案也可能非常大。因此,您只对找到模 109+7 的答案感兴趣。

    输入
    输入的第一行包含一个整数 t (1≤t≤100),表示测试用例的数量。

    每个测试用例的第一行包含三个整数 b、q 和 y(-109≤b≤109、1≤q≤109、2≤y≤109),分别表示 B 的第一项、公差和项数。

    每个测试用例的第二行包含三个整数 c、r 和 z(-109≤c≤109、1≤r≤109、2≤z≤109),分别表示 C 的第一项、公差和项数。

    输出
    对于每个测试用例,打印包含单个整数的单行。

    如果有无限多的有限算术级数可能是您丢失的级数 A,请打印 -1。

    否则,打印有限算术级数的数量,这可能是您丢失的级数 A 模 109+7。特别是,如果没有这样的有限算术级数,则打印 0。

  5. 符号 ∧ 非常含糊,尤其是在没有上下文的情况下使用。有时用于表示幂(a∧b=ab),有时用于表示异或运算(a∧b=a⊕b)。

    你有一个模棱两可的表达式 E=A1∧A2∧A3∧…∧An。您可以用幂运算或 XOR 运算替换每个 ∧ 符号,以获得明确的表达式 E'。

    该表达式 E' 的值根据以下规则确定:

    所有 Power 操作都在任何 XOR 操作之前执行。换句话说,Power 操作优先于 XOR 操作。例如,4XOR6Power2=4⊕(62)=4⊕36=32。
    连续功率从左到右计算。例如,2Power3Power4=(23)4=84=4096。
    给定一个长度为 n 的数组 B 和一个整数 k。数组 A 由 Ai=2Bi 给出,表达式 E 由 E=A1∧A2∧A3∧…∧An 给出。您需要找到所有可能的明确表达式 E' 的值的 XOR,它可以从 E 中获得,并且至少有 k ∧ 符号用作 XOR 操作。由于答案可能非常大,您需要以 2220 为模找到它。由于这个数字也可能非常大,您需要打印它的二进制表示,不带前导零。如果答案等于 0,则打印 0。

    输入
    输入的第一行包含两个整数 n 和 k (1≤n≤220,0≤k<n)。

    第二行输入包含 n 个整数 B1,B2,…,Bn (1≤Bi<220)。

    输出
    打印包含二进制字符串的单行,前导零表示问题的答案。如果答案等于 0,则打印0。

  6. 这是一个交互问题。

    一个城市有 n2 个建筑物,分为 n 行 n 列的网格。您需要在每对相邻的建筑物 A 和 B 之间建造一条长度为 D(A,B) 的道路。由于预算限制和法律限制,每条道路的长度必须是正整数,并且所有道路的总长度不应超过48000。

    城里有一个小偷,他会从最顶层、最左边的建筑物(第一行第一列)开始在城里四处游荡,偶尔会从一些建筑物中偷走文物。他可以通过连接它们的道路从一栋建筑物移动到另一栋相邻的建筑物。

    您无法追踪他访问了哪些建筑物以及他沿着什么路径到达它们。但是城市里有一种追踪机制。跟踪器能够存储一个初始为 0 的整数 x。每次小偷通过长度为 D(A,B) 的道路从建筑物 A 到另一个相邻的建筑物 B 时,跟踪器将 x 更改为 x⊕D(甲,乙)。每次小偷从建筑物中偷窃时,跟踪器都会报告存储在其中的值 x 并将其重置为 0。

    事先知道小偷会偷窃 k 个建筑物,但只有在盗窃实际发生后,您才会知道跟踪器返回的值。您的任务是选择道路长度,使无论小偷采取何种策略或路线,您都可以从跟踪器返回的值中准确判断出盗窃发生的所有建筑物的位置。

    相互作用
    首先读取一行包含两个整数n(2≤n≤32)和k(1≤k≤1024)分别表示行数和盗窃次数。

    让我们用 Bi,j 表示第 i 行中的第 j 个建筑物。

    然后打印 n 行,每行包含 n-1 个整数。第 i 行的第 j 个整数必须是 D(Bi,j,Bi,j+1) 的值。

    然后打印 n-1 行,每行包含 n 个整数。第 i 行的第 j 个整数必须是 D(Bi,j,Bi+1,j) 的值。

    请记住,道路的总长度不得超过 48000。

    然后回答 k 个查询。首先读取跟踪器返回的值 x。然后打印两个整数,表示发生盗窃的建筑物的行号和列号。之后,您将能够回答下一个查询(如果存在)。

    打印答案后不要忘记输出行尾并刷新输出缓冲区。否则,您将得到超出 Idleness limit 的判断。要刷新缓冲区,请使用:

    C++ 中的 fflush(stdout) 或 cout.flush();
    Java 中的 System.out.flush();
    帕斯卡中的刷新(输出);
    Python 中的 stdout.flush();
    阅读其他语言的文档。

虽然真的很绝望,第一反应是我根本对不起我老师,但,还是要坚强地站起来

两个小时六道题,不着急,时间很多,反正都做不完题

来我们先分析一下题目吧!(请自行忽略翻译问题谷歌真的已经很优秀了)

第一题是一道字符串的题,没有用到什么高级的思想(可能还是用到了的只是我不知道),但是我比较了解我自己,按照写代码的能力、速度、细心程度和对字符串的熟悉程度,我认为这道题我应该放弃。我估计会写到四分之一就崩溃,导致后面的题根本无法做。我个人认为C++根本就不适合这类问题,我可以写个伪代码,或者如果我特别擅长王八编辑器的话,我可以用python试试哈哈做梦吧

第二题还是字符串,而且比第一题还要复杂(第一题至少没有这么容易让人联想到KMP之类的东西)abandon 

第四题abandon

第六题是个搜索,不用说也是abandon

所以现在我找到了两道题,也正是我一开始看中的两道题。现在看来第二题其实应该比第一题略简,但只要是字符串的都没有太大的希望

毫无疑问,现在已经过去一个小时了。最大的可能性是,我最后会爆零

但就算知道命运已定,也要再垂死挣扎一下

先给第二题打个表,主要是想熟悉一下怎么交代码,知道肯定没用

#include<iostream>
using namespace std;
int main(){
	int t;
	cin>>t;
	for(int i=1;i<=t;i++)cout<<"NO"<<endl;
	return 0;
}

好的非常成功地WA了

那么我们接下来干正事了

是我的问题,读题没有读完,第五题确实一开始很好理解,可是读到后面简直一团乱麻

第三题是我唯一读完并理解好了的题,还有40分钟,不要放弃,我们开始搞第三题

我草不是吧提交失败还要扣50分我现在有负100分了哈哈

于是,我干了一件很要脸的事,在CSDN上直接找到了求回文数的模板

但是我现在真的要爆炸了啊,我们已经求出了1~N之间所有的回文数,但是我们还要判断怎么让这些数加起来等于N,而且每个加数还数量不限可以重复

对不起老师我没有好好学枚举给您丢脸了

现在已经0点11了,我没救了

现在给您打电话您也已经睡着了

真对不起,对不起,老师

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

最后献上我最后的代码——————

也算是春蚕到死丝方尽蜡炬成灰泪始干了

bool palindrome(int a){
    int count=0;
    if(a<10&&a%10 == 0)return 0;
    else{
        while(a>count){
            count = count*10 + a%10;
            a = a/10;
        }
        if(a == count || a == count/10)return 1;
        else return 0;
    }
}
int main(){
	int a,n,palindromes[1000000000000];
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a;
		for(int j=1;j<=a;j++){
			if(palindrome(a))palindromes[j]=a;
		}
	}
}

知道交上去也没什么意义了,所以最后的几分钟我总结一下吧

  • 时差要算对,细心一点,UTC是非常常见的计时方式
  • 题目太多太难,时间太短,切莫慌张,冷静地找到一道你确认过眼神的题,然后把剩下的所有时间都倾注到此题上。因为当你觉得应该放弃时,一切都已经晚了。无论你是去看另一道题还是死磕此题,基本都没什么希望,所以一开始题目要选好,后面就别换了。对于我这种水平的蒟蒻,两个小时做一道这种难度的题差不多了。
  • 千万莫打表,根本没有任何希望,WA了CE了RE了全部都要倒扣50分
  • 选题过程尤为重要,建议每道题都看完再看下一道,当然那种翻译都有问题看不懂的可以直接跳过了。但是abandon了就再也不要回去看了
  • 这个可不是那种正规的考试哦,可以插U盘,可以上网,当然可以,嗯。。。。。其实你想想嘛,两个小时六道题,要多厉害的大佬才能全部手敲代码啊。这个比赛本身搞得这么高难度还不是因为那其实很多人的代码都不是现敲的。所以大家平时可以把一些常用的程序(求素数啊,最大公约数啊,快速幂啊)收集起来,养成这样一个好习惯,平时刷题也好关键时刻也好,给他改编一下弄成一个bool函数,那都是很好的资源利用啊。当然也不是所有的常用程序都可以做到应有尽有,像回文数这种就比较偏僻,就可以上网查找嘛。那么既然找到了一次,就把他给收集起来以便下次利用了。
  • 每道题后面都有note,可以提供一些重要的思路。如果你像我这样比赛都快要结束了才看到Note的话就惨了。。
  • 翻译也是让人比较头疼的一点。建议选择谷歌或其浏览器翻译。译文在格式上会出现一些问题,这个只要稍微留意一点与原文进行对比就能够解决。还有就是一些特殊的词语,你至少需要知道它们的英文单词(比如charactor,很显然在题目中是字符的意思,它就容易给你翻译成角色)其实语感好的人多看一会儿题目就能够会意
  • 如果你真的写出来了,一定要先确保本地运行在可见范围内无误,再提交(submit fail也是-50分哦!)

那么差不多了,我们就来揭晓结果吧!

 

零分,排第7630名 (共17986人,有并列排名)

名列前茅的人,一万的满分,能拿八九千 

远远排在我后面的人,能拿负几千分,然而像他们那样努力的人,却还排在了我这样什么都不做的人的背后

老师,对不起,对不起,是我的错,我这种水平的人根本不该上CF

但是如果我永远都不走出去,我永远都就不会知道世界有多大。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值