2024 XCPC 哈尔滨 & Chengdu 游记
CCPC
Day -1
第一次坐飞机,起飞后世界瞬间变得好小,白云在我面前流过,河上的船一动不动. 随后出现的积云构成了冰川,剩余稀薄的云雾掩盖下面的城市,成为一片蓝色的海. 视线的尽头,我看到了被深蓝和浅蓝夹着的地平线. 今晚的月亮圆得像人造光源,与机翼的指示灯一同照亮了夜幕.
飞机落地立马掏出我的羽绒服,下机后感到这就是刚开始降温的哈尔滨吗,它还没出全力我就要倒了. 哈尔滨的风很大,到处飘飞的袋子似乎成了一种特色.
飞机上晚餐没吃饱,赞美然叔给我们加餐,锅包肉真好吃. 看到沈学长打邦邦下落速度那么慢感到非常惊恐,膜慢速神仙.
Day 0
起床完成了第一次 MEDLEY FULL COMBO(虽然都是 HARD).
龙爷带我们冲锋去东北林大体育馆签到,过马路走的是天桥,天桥上面有卖东西的有躺着的.
签完到成功对着导航绕了体育馆一圈才发现食堂在外面. 感觉食堂很好吃.
热身赛开幕直角回车键盘雷击,刚开始没有中文题面队友围着我看题(.
\(A\) 开场和任佬想假了两发,跟沈学长讲题面他一直没听懂(,没玩过宾果游戏导致的(.
\(B\) 沈学长一眼江苏省赛原题就秒了,%%%.
热身赛打一半后面队椅子塌了(剧透:正式赛还会再塌一次.
然后不会做 \(C\)!推了推式子感觉没什么好的性质,只能试着写个暴力看看能不能找到什么高妙结论.
这时候吕爷跑过来了,\(D\) 是带花树他们懒得打两百行板子所以三题下班了. 吕爷告诉我们只要在式子两边都加上和对方点集的距离和就行了,这样差值不变. 感觉见过类似的套路,但是没想出来.
Day 1
因为网络设备问题比赛延时了 20min,沈学长和任佬在激烈讨论星铁剧情然而我听不懂(.
一下子看出 \(M\) 像签到,结果伪代码看不懂,问任佬题意是什么结果任佬直接开写了/bx.
然后任佬迅速把 \(C\) 写了,交上去 TLE 了. 我们看了打印代码半天都没有看出哪里可能会 T. 这时候沈学长一眼看出是 std::cin/cout IO 关闭同步流相关的问题. 从来没用过关闭同步流所以不懂.
看了会儿 \(E\) 只会朴素的 \(O(n^4)\) dp,后来和沈学长也没讨论出来怎么优化.
跟榜看 \(G\),想了一下只要建出 DAG 判断一下可达性就行了,但不是很会直接写感觉要拓扑排序,这时候任佬指出直接从有双向边的点开始遍历就行了,这样写起来就很快,交上去 WAWAWA. 和任佬瞪了半天才发现输出格式的问题,成功贡献两发罚时.
沈学长开场就一直在想 \(J\) 终于可以上机了.
我和任佬继续跟榜看 \(K\),讨论发现删除时间限制的目的只有两种可能,一种是让处理时间尽可能长,只要讨论 \(w_i\) 最大的作物,另一种是让处理时间尽可能小,需要枚举 \(i\) 并二分计算收益. 这时候沈学长 \(J\) 写完了但是 WA 了在调题. 所以我们决定使用网络赛的策略打印 \(J\) 的代码换我上机写 \(K\). 感觉 \(K\) 写得非常乱,写完过样例了但是我发现我写的全是错的(,疯狂改代码然后发现每次改样例都能过,然后我觉得改得差不多了就交了,然后居然就过了非常感动,成为全场除 \(M\) 外唯一一个没有 dirt 的题(.
一发过 \(K\) 非常快乐就开始啃发的午餐面包,顺便理解了一下 \(J\) 的思路感觉很对但是实现有一处问题,啃了一半面包吃不下去了继续啃火腿肠,任佬称这个东西为哈尔滨红肠,虽然它只是一根哈尔滨的红色火腿肠(.
沈学长调了一会冷静思考觉得他的代码很难调出来了. 于是我决定来重新写一份,沈学长和任佬开 \(L\).
我写完 \(J\) 发现过不了样例感到不太妙. 改了改虽然过了样例还是 WAWAWA. 甚至过不了之前沈学长和任佬构造的数据. 这时候他们俩已经得出了 \(L\) 的一个点分树做法, 于是就换沈学长上机写 \(L\). 我看着数据模拟啊想啊想啊模拟啊模拟啊想啊想啊发现要用优先队列维护顺序,然后就突然发现我直接全用优先队列做就行了,代码可以写得非常简单. 于是我决定再重写一份我的代码.
这时候已经进入最后 1h,沈学长和我来回上机,卡了就换,一直调到最后 20min. 这时候的压力特别大,因为再过一题是铜,过两题就是银,感觉这样下去一题都过不了. 我还是冷静了一下,看着打印代码突然想起优先队列是从大到小的,我没在值入队列的时候加一个负号. 加上了好几个负号就过了,稍微松了一口气. 最后 15min,任佬有了 \(A\) 的做法但不可能上机了,我什么做不了,只能成为端茶送水小能手. 看着沈学长一遍又一遍的输出中间结果但是都没有发现错,我的脑子里浮现出了很多个情景,但都指向同一个结局.
比赛结束了,沈学长还在调题/ll.
感觉 \(J\) 是个好想不好写的题,容易没想明白具体怎么实现就写,导致了最后两题同时调堵车.
滚榜,不得不佩服电科的控线能力,5 题从铁牌首一直排到银牌尾, 然后有 4 道金牌题.
成功拿到了第一个 ACM 的牌子!!!而且底色是金色的(.
呆呆鸟捧杯,第一次亲眼见到 dottle /bx.
滚完榜领完奖队友们就跑去赶飞机了. 我留下来晚上又有然叔加餐. 其中有一道菜外表和锅包肉很像,但是味道完全不同,不过也是非常好吃. 吃的时候听到坤爷说他们猜到了这次的热身赛气球颜色就是正式赛气球签到题颜色,想了想有道理,因为签到题的气球会有很多,多余的可能就发给热身赛了.
一场有着很多遗憾的比赛,但我很享受赛场的时光.
ICPC
Day -1
郫都区离成都天府机场太远了,下飞机坐了巨久地铁. 因为听说又是电科出题,路上在看 UESTCPC 2024 的题目,\(C\) 看样例就猜到答案了,归纳证明就行,\(D\) 看了巨久时间,然后发现把黑珠全放左边就好了,\(E\) 转换成了每次对 \(01\) 串选 \(1\) 在的位置将两边删除的操作,接下来就不会做了. 循环放了很多遍《成都》.
因为第二天有 CSP-J/S,又有济南站,然叔周日凌晨才能赶过来,所以没有加餐,非常遗憾.
Day 0
签到领到了活的熊猫,还有 UESTC 的黄金芯片. 然后沈学长问我们要不要去学校墙前拍队伍照,如果不拍明天会在场上抓拍. 因为没穿参赛服,抓拍又很刺激,果断选择不拍.(结果第二天就我一个穿了赛服,场上也没有抓拍,于是滚榜的时候我们队并没有照片
吃完午饭在体育场坐着,看 jls 粉丝群有没有 jls 位置信息,结果没有,都是假粉. 结果热身赛一进去就看到 jls 比赛座位就在门口,大伙正在排队拍照,果断上去成功和 jls 合影!顺便有了我们队的第一张合影. jls 怎么那么高. 合完影走的时候还顺便偷拍了张钱哥的背影.
拿到题面是英文,可想而知正赛没有中文题面了/ll.
\(D\) 题要求输出成都站上次举办的年月,任佬拿出手机搜了好久,最后才确认是 \(13\) 年 \(10\) 月,隔了好久了啊.
\(A\) 题有着巨大长题面,一遍看完没看懂,再看一遍发现只要模拟一遍排序就好了.
沈学长开 \(C\),我和任佬开 \(B\).
\(B\) 居然是交互题,暗示着正赛有交互. \(C\) 要覆盖矩形,我和沈学长想了个线段树的做法,但是不是很对.
任佬指出 \(B\) 题环上必然存在两段答案为常量的弧,并且因为 \(n\) 是奇数所以必然是一段劣弧和优弧,接着又指出两个特殊点和其对称点的连线将环正好分成四块区域,分别是两段变量弧和两段常量弧.
顺着这个结论想,我认为可以先随一个起始点询问,然后通过询问前后点来判断起始点的所在的区域. 如果前后点和起始点答案都不同就是在变量弧,并且每次答案的增量恰为 \(2\),于是可以二分找到特殊点. 否则在常量弧,如果在优弧就对称过去到劣弧,然后二分就能找到特殊点. 感觉很对就开写了,还剩几分钟交上去 WA 了,任佬指出我输出没加感叹号!加上后最后一分钟交上去晚了显示 TOO-LATE.
热身赛完去参加华为无线天才少年面对面,得到了一张据说能插电的卡和一个大熊猫.
体育馆的自助餐还挺好吃.
回到酒店把热身赛 \(B\) 题重打了一遍,发现实现有一处问题,如果优弧只有一个点,随到优弧的时候会认为在变量弧上需要特判. 沈学长想到了更简单的做法,随一个点接下来左右询问 答案/2 距离的点必然有一个在劣弧上,然后只要在劣弧上二分即可.
来成都坐飞机的时候队友提到了 Ob 后面一串字母,所以把倒放 MyGO 第十一回再看了一半就睡觉了. 可能是上场哈尔滨的原因,梦到了明天的题目非常难,我们过了两题之后第三题在最后没能调出来,最后打铁了,相拥而泣.
Day 1
因为比赛开始时还有人没进场,所以延时了 5min.
因为热身赛的气球颜色对应 \(C\) 和 \(M\),所以开场我让任佬看 \(M\),我看 \(C\),沈学长先配环境.
任佬看了 \(M\) 的标题和老长的题面就弃了,赛后证明他的选择如此正确.
\(C\) 是一道和交互库博弈的交互题,非常有意思,但是肯定不会做.
然后任佬找我来看 \(K\),我看了看胡了个按质因数排序的贪心,因为没人上机就直接开写了,交了发 WA 了,然后看到 jls 拿到了 \(K\) 的一血,觉得可能 \(K\) 是签到,改了一下贪心策略,交上去还是 WA. 我冷静下来构造了组数据发现不会处理遗憾下机.
沈学长和任佬这时终于讨论出了 \(G\) 的结论过了.
跟榜看 \(A\),想了一会发现只要首个字符是箭头,含有横杠,其他箭头段大小大于等于 \(3\) 就可以构造答案,和队友交流了一下大家觉得很对,就当任佬要开写的时候我突然发现只需要最后一段箭头段大小满足大于等于 \(3\) 就可以,喜减一次罚时(.
在任佬写 \(A\) 的时候我和沈学长在看 \(I\). 开始我的想法是每次修改只会修改 \(n\) 块对答案的贡献,但是不好用线段树或其他数据结构维护. 没什么思路后我就跑去看 \(J\) 了,发现是道巨长模拟,但是看得很快,规则也很简单,好像只要模拟一下就好了?迅速写完然后因为没删 freopen 和爆 int 贡献两发罚时.
午餐发下来发现还是有火腿肠,因为和哈尔滨的好像一模一样,所以它也是哈尔滨红肠(.
啃红肠的时候发现 \(I\) 先把递增段处理出来,不考虑最后一块的情况下,块长 \(k\) 必然是递增段的因数,所以 \(k\) 是递增段 \(\gcd\) 的因数,只要维护 \(\gcd\) 就好了. 然后在讨论怎么处理最后一块的时候,沈学长发现最后一个递增段不用考虑,\(k\) 是且仅是前面递增段 \(\gcd\) 的因数,分类讨论了一下非常对. 单点修改的时候会分裂或合并递增段,那么 \(\gcd\) 怎么维护呢,我这时重新想到了先前放弃的数论分块的想法,段长 \(\geq\sqrt n\) 的只有 \(O(\sqrt n)\) 个,所以可以直接用 map 存. 但是我怕 \(O(n\sqrt n \log n)\) 会 T,任佬提出可以用 unordered_map,沈学长上机开写.
沈学长写 \(I\) 的时候我和任佬一起想 \(B\),先考虑一次询问想到了一个 \(O(n^3)\) dp,然后怎么多次处理询问我发现将 dp 的状态从剩余的填问号次数改成已经填问号的次数就可以 \(O(n^3)\) dp 预处理,然后询问就是询问 dp 数组的三维前缀和. 但是三维前缀和只有沈学长会写. 还剩 \(1\) 小时 \(45\) 分钟,沈学长 \(I\) WA 了打印代码下机了. 当时我认为我来写 \(B\) 的 dp 部分半小时可以写完,任佬来写时间应该也够,而且我可以帮沈学长调代码,所以没自己去写 \(B\). 结果我 \(I\) 的代码还没看完沈学长就找到了错误,改了交上去就过了.
然后沈学长给我推了一遍三维前缀和,但是听不懂. 只能看队友表演了. 接下来任佬测样例输出 \(3\) 个 \(0\) 大家都傻眼了,我看着打印代码发现任佬设的一维状态是上一个的颜色,而不是当前的颜色,想了想觉得这样写不对,和沈学长讨论了一下好像这么写确实不太行,这时候已经封榜很久了,感觉让任佬改状态的话就要重构代码了. 当时完全不知道命运如何的我立刻决定让我上机写一份新代码,让任佬在下面静态查错. 接过键盘的一刻,完全不知道自己有没有清楚怎么写了,但是想到这个 dp 很简单我冷静下来. 沈学长在后面我写,我每写一段和沈学长确认一遍,把几种情况简化了一下,dp 写得很短,比较快写完了,测样例输出 \(3\) 个 \(0\) 我的心直接沉到了底点,噩梦的感受一遍遍重现. 还有二十来分钟,我还是冷静下来告诉自己,时间还够,时间还够,输出 dp 数组变量第一行 \(0\ 0\ 3\ 3\) 完全理解不了. 但我此时的理智告诉我就算这样也不会输出 \(3\) 个 \(0\). 让沈学长再检查了一下三维前缀和的部分发现最后没赋值. 改了之后还是不对,然后我发现了在处理固定颜色的时候转移写错了,改了下还是不对,还是不对... 还有时间,还有时间,怎么可能会是 \(0\ 0\ 3\ 3\),怎么可能会是 \(0\ 0\ 3\ 3\)... 突然任佬大叫一声:“你没清空!”. 没清空,没清空,没有清空,在最后清空数组. 输出 \(2\ 0\ 0\) 和样例都差 \(1\),还有哪里不对,中间变量还是不对. 最后十分钟,陆续传来了远远的几声怒吼,他们在最后时刻过题了. 最后 5min,沈学长发现我前面特判 continue 掉了所以没清空. 没清空,没清空,把所有 continue 删掉,删掉,加上 else,样例过了,样例过了.. 但是三维前缀和跑了 2s 以上,会 T 吗.. 比赛时间 04:55:46 交一发,红色 WRONG-ANSWER. 还有哪里会错呢,还有 4min,还有时间,冷静下来,哪里会错呢. 把之前为了保证 x,y,z <= n 的取 min 操作删掉,04:57:24 胡乱交上去,还是 WA,没有用... 还有时间吗,还有 2min,冷静下来再查一遍,角落的 continue 没有删掉,删!加 else,加大括号,交. 04:59:01. Pending... Pending... 不会 T 吧,不会 T 吧,不会 T 吧... Pending... 完了. 比赛结束前的那刻,出现的是绿色的 CORRECT,过了!忍不住直接吼了出来. 最后一分钟过题. 任佬的思路,我的 dp,沈学长的三维前缀和,三个人在最后时刻调出了代码,这就是 ACM 的魅力吧...... 忍不住和沈学长和任佬抱在了一起...
\(\underset{我想我大概、一辈子也忘不了 \rm DML 吧.}{私たぶん、一生 \rm DML のこと忘れられないよ.}\)
滚榜的时候看到了 dls 和老 k 在欢乐地讨论题目.
晚上打车到双流机场旁边的酒店,有然叔加餐好哎!不过都好辣(. 和沈学长组队打邦邦非常快乐.
因为饭店旁边就是四川大学江安校区,于是直接步行去四川大学找 \(\rm \color{red}{L}\color{black}oxilante\). 结果好像逆行走了机动车道,一路上都是电动车和老头乐,吓死我了. 走到已经快 9 点了,在东南门马路对面等 \(\rm \color{red}{L}\color{black}oxilante\) 过来,可惜学校只让在晚上 \(8\) 点前进,不能进学校逛了. 本来带了 More than you thought 想送 \(\rm \color{red}{L}\color{black}oxilante\) 的,结果包放酒店了,摸了摸裤兜什么都没带,只有成都站热身赛和正式赛发的两支笔,让他选一支好了. 过马路又把我吓死一次,和 \(\rm \color{red}{L}\color{black}oxilante\) 没聊多久出租车就到了. 不过后来 \(\rm \color{red}{L}\color{black}oxilante\) 通过边骑行边视频通话让我成功云游川大,不过夜太黑什么也没看到,就看到一片湖了,然后电话就断了,吓得我以为 \(\rm \color{red}{L}\color{black}oxilante\) 手机掉湖里了. 后来说明不是.
回酒店和沈学长熬夜打 cf global round,物理意义上同台竞技,结果大家都倒闭了,一看沈学长好友列表全下分了,jls 也下分了,那么谁上分了呢?
Day 2
早上 \(6:30\) 起,\(7:00\) 踩点上接机班车,继续和 \(\rm \color{red}{L}\color{black}oxilante\) 云游川大,云游了川大的工地(,还看到了川大不错的宿舍.
明年再见吧.