春光明媚,圆月高照,月明星稀,在这个伸手不见五指的夜晚, 机房里一位同学突然喊道:“今晚有ABC,打不打?”
我的第一反应:天哪已经周六了。
包打的呀!
当晚,机房里可能将近 10 位同学打开了 Atcoder有道翻译,蓄势待发。我甚至提前打好了头文件和数组。
比赛开始前 10 min,我不小心关掉了 AT 的页面,再打开的时候发现页面卡崩了,怎么刷新都没用。5 分钟过去了,我看着旁边同学的页面都是正常的,心想完了要进不去了。所幸删掉重进又可以了。
随着 8:00 下课铃的敲响,我们手忙脚乱地打开了 A 题。

A 题

视网膜:“B1,B2,B3,B1×B2=B3. 样例是 3,15,5,输出是 Yes。”
哦那大概就是说三个数随便排列,问是否有其中两数之积等于第三数。
在第 1 分钟,我成功过掉了这道题。

B 题

“哇你打的太快了吧!”旁边同学感叹道。
“有人开场 15 s 就 A 了!”
我一口气打开了 B 题、C 题、D 题。
视网膜:“element。distinct。do not appear。样例是 10 3\n3 9 2,输出 7\n1 4 5 6 7 8 10。”
知道了,求补集。
会有重复数字吗?看样例没有,但万一有呢——啊 distinct 是“不同的”,那没事了。
2 min 44 s 的时候,我交上了代码。
我有点慌,因为我连过编也没有过。我在疯狂地按刷新,突然,它闪出了一个页面:

403

完 damn 了呀!紧接着机房里响起了此起彼伏的声音:
“我怎么 403 了呀!”
“我也 403 了呀!”
“可能是机房里人太多了,IP 被 ban 了。”
“那怎么办?”
“凉拌。等。”
于是我连自己多少分都不知道,在不确定的慌张中,我点开了 C 题。

C 题

bib?bib 是什么东西?还有什么“star-ing”(实际:star(e)-ing)?不管了,看样例。

Person 3 is wearing the bib with the number 1, and the person that person 3 is staring at, person 2, is wearing the bib with the number 3. Thus, the answer for i=1 is 3.

3 穿着 bib 1,而 3 看着 2,而 2 穿着 bib 3,所以 i=1 的答案是 3
那大概是问你戴 bib i 的人看着的人戴的是 bib 几咯。
样例是4\n4 3 2 1\n2 3 1 4,我看,第二行中第三个是 1,第一行中这个位置是 2,第二行第二个是 3。那第一行就是在看谁,第二行是穿了什么 bib 咯。

所以 bib 到底是啥啊?百度告诉我是围兜。。。
好吧题目中的图画的确实挺像围兜的,但是也太简陋了吧!

当我要开打的时候,旁边同学围过来要看题意。还有看不懂的要我解释。于是我一边打一边跟他们解释。
捋了一下逻辑关系,打打调调就过样例了。我按下了提交键——

403

“那啥样例是什么来着?”
“我刚交了代码现在 403 了呀!看不了啦!”
“那你是否还记得……”
“让我回忆一下,我记得 3 看着 23 穿着 1 号围兜,2 穿着 3 号围兜,那 14 互相看咯,但是 4 好像没有穿 4 号围兜,那就是——4,3,2,1,4,3,1,2???”
我自己都不信。

D 题

直接丢翻译。翻译说,有 n 个骰子,第 i 个骰子有 ki 面,上面有数字。任选两个骰子,使得摇出相同数字的概率最大,求这个概率。
n100?但是 k105?看着就像是暴力,但是感觉不像很能暴力的样子。
我码码停停,中途发现看错题了,又删了再来一遍。有声音说“的确可以暴力”,坚定了我的信心。
我决定把相同数字合并到一起,排序,然后枚举两个骰子,查找时二分。这样应该没问题吧……
“诶可以了没有 403 了!”
一闻此言我赶紧刷新页面,结果发现我 C 题交都没交上去……。
19 min 20 s,我通过了 C 题。
接着我继续写写调调,终于过了样例,把 D 题交上。
此时是 20:30:48

F 题

我打开了 E 题和 F 题。先看 E 题,琢磨了一下题意,发现似乎不怎么会(毕竟是构造题)。于是看 F。

给出 pi,按顺序进行一种操作:把数字 i 插入到序列中,使得它成为序列中的第 pi 名。求最后的序列。

我们需要把序列拆成 2 部分,然后把一个数字和两个区间合并……区间分裂,区间合并……
哈我知道啦!文艺平衡树!
于是我找到了这道题,翻出了之前的代码。
完啦看不懂!
又翻出了题解,阅读了好几遍,终于明白了我当年在写什么。
然后发现标记区间翻转的懒标记根本不需要。
然后修改一下,交,也是顺利地 A 了。
此时是 20:41:40

E 题

再认真的看一遍 E 题。大意是说一些边连接着一些点,现在要把一些边的一端连接到另一些点,使得点们互相连通。
啊互相连通啊。那就是并查集。
然后应该是有一些边是冗余的。(比如那些自环是什么抽象东西,还有大的环可以拆一条边。总的来说就是如果边两端的点本来就连通那就是冗余的。)
还需要判断哪些点不在预定的集合内。
然后……
就是疯狂的写啊调啊改啊。
21:09:04 一直肝到 21:29:17,我总共肝了 20 min,贡献了 5 发罚时,终于 A 掉了。
其中犯了很多错误。其中最那啥的有一个是:

++ans,as1[ans]=s2[i],as2[ans]=s1[i],as3[ans]=dq,ff[i]=1,
->
++ans,as1[ans]=s2[i],as2[ans]=s1[i],as3[i]=dq,ff[i]=1,


此时我欣喜的发现自己的排名上三位数了。好耶!可以涨大分了!

G 题

老实说这道题我有点眼熟。应该之前做过弱化版,n1000 的那种。
身后有同学说:“我之前看到有人用 FFT 做过。”
啊 FFT?不好意思,不会(准确来说是学过但忘了),再见。
于是剩下的时间都在颓。

赛后看题解,还真是多项式乘法求方案数。
还是得加练。

在同学那里看了插件,发现自己预计可以涨 48 rating。
什么?才 48?我好不容易才上 1000+,结果你……
第二天,看见自己 performance 有 1465。都破纪录了我请问你呢???为什么不给我多加点?!?!!?照这个蜗牛速度什么时候才能上 1200 啊!
将来一定要把 G 题补出来!