春光明媚,圆月高照,月明星稀,在这个伸手不见五指的夜晚, 机房里一位同学突然喊道:“今晚有ABC,打不打?”
我的第一反应:天哪已经周六了。
包打的呀!
当晚,机房里可能将近 \(10\) 位同学打开了 Atcoder 和 有道翻译,蓄势待发。我甚至提前打好了头文件和数组。
比赛开始前 \(10\) min,我不小心关掉了 AT 的页面,再打开的时候发现页面卡崩了,怎么刷新都没用。\(5\) 分钟过去了,我看着旁边同学的页面都是正常的,心想完了要进不去了。所幸删掉重进又可以了。
随着 \(8:00\) 下课铃的敲响,我们手忙脚乱地打开了 A 题。
A 题
视网膜:“\(B_1,B_2,B_3,B_1 \times B_2=B_3.\) 样例是 \(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 的时候,我交上了代码。
我有点慌,因为我连过编也没有过。我在疯狂地按刷新,突然,它闪出了一个页面:
完 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\) 了呀!看不了啦!”
“那你是否还记得……”
“让我回忆一下,我记得 \(3\) 看着 \(2\),\(3\) 穿着 \(1\) 号围兜,\(2\) 穿着 \(3\) 号围兜,那 \(1\) 和 \(4\) 互相看咯,但是 \(4\) 好像没有穿 \(4\) 号围兜,那就是——\(4,3,2,1,4,3,1,2\)???”
我自己都不信。
D 题
直接丢翻译。翻译说,有 \(n\) 个骰子,第 \(i\) 个骰子有 \(k_i\) 面,上面有数字。任选两个骰子,使得摇出相同数字的概率最大,求这个概率。
\(n \le 100\)?但是 \(\sum k \le 10^5\)?看着就像是暴力,但是感觉不像很能暴力的样子。
我码码停停,中途发现看错题了,又删了再来一遍。有声音说“的确可以暴力”,坚定了我的信心。
我决定把相同数字合并到一起,排序,然后枚举两个骰子,查找时二分。这样应该没问题吧……
“诶可以了没有 \(403\) 了!”
一闻此言我赶紧刷新页面,结果发现我 C 题交都没交上去……。
在 \(19\) min \(20\) s,我通过了 C 题。
接着我继续写写调调,终于过了样例,把 D 题交上。
此时是 \(20:30:48\)。
F 题
我打开了 E 题和 F 题。先看 E 题,琢磨了一下题意,发现似乎不怎么会(毕竟是构造题)。于是看 F。
给出 \(p_i\),按顺序进行一种操作:把数字 \(i\) 插入到序列中,使得它成为序列中的第 \(p_i\) 名。求最后的序列。
我们需要把序列拆成 \(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 题
老实说这道题我有点眼熟。应该之前做过弱化版,\(n \le 1000\) 的那种。
身后有同学说:“我之前看到有人用 FFT 做过。”
啊 FFT?不好意思,不会(准确来说是学过但忘了),再见。
于是剩下的时间都在颓。
赛后看题解,还真是多项式乘法求方案数。
还是得加练。
在同学那里看了插件,发现自己预计可以涨 \(48\) rating。
什么?才 \(48\)?我好不容易才上 \(1000+\),结果你……
第二天,看见自己 performance 有 \(1465\)。都破纪录了我请问你呢???为什么不给我多加点?!?!!?照这个蜗牛速度什么时候才能上 \(1200\) 啊!
将来一定要把 G 题补出来!
浙公网安备 33010602011771号