ICPC 成都站 & CCPC 哈尔滨站 技术总结

Rainy_chen

2024-10-30 05:06:50

Life & Travel

这里是 rainy,电子科技大学 ACM 集训队技术组成员。

这篇文章主要是赛后的技术总结,但也掺杂了部分游记类内容。

CCPC 哈尔滨站

电子科技大学负责本年 CCPC 哈尔滨赛站的出题工作,因此需要派出几位同学负责裁判组工作,我被选中去和 CSG 老师做交接。

由于本年度所有 CCPC 均由 CSG 老师带领的团队负责技术支持,因此这一部分内容会比较短,也正因如此本篇文章将仅被提交至 ICPC 分类。

Day -2

裁判组有一些需要在赛前完成的工作,因此我们选择在周四乘飞机前往哈尔滨。

入住酒店已经是晚上七点钟了,找了附近一家铁锅炖,三个人点两人餐根本吃不完()

好消息:周五才降温,周四的时候哈尔滨还有十多度,没有体验到下飞机气温骤降的快乐。

Day -1

坏消息:第二天就是周五,刚出酒店门就回去换了件厚的衣服。

午饭是去的中央大街一家俄餐,没有很符合我以前对俄餐的认知,但是蛮好吃的。

下午比较重量级,我们需要去打印题面,在主办方老师的推荐下我们去了一家十分偏僻的打印店。

打印店并没有任何问题,但是问题在于为了保密性考虑,没有一个志愿者能被喊来对题面进行装订,因此现场只有我们三个裁判组和一位东林的老师在进行装订。

九百多份题面,一直干到七点多天已经完全黑了才干完,干到后面就感觉自己已经完全是个无情的 bot 了。

到赛场看了一眼,裁判桌离选手大概只有十多米的样子,有点哈人。

晚上去找了家烧烤吃,平心而论,菜量很一般。

Day 0 热身赛

大家好啊,我是电子科技大学的大厨,今天来给大家看点想看的东西。

不是很想评价什么东西,随便说点谜语。

有的时候人和人之间还是要多一些理解多一些沟通,没有人乐于看到不那么令人高兴的事发生在自己身旁。无论是谁都应该在做出无可挽回的决策之前多思考,多和相关人士沟通,更切莫在上头时以手头的权力肆意进行攻击。
我并不赞成任何一方的做法,这件事的发展无疑是在双方所欠缺的理性思考与友善沟通中走向了相当坏的局面,但错已铸成,难以挽回。

晚上配环境的时候场地工作人员来换了个交换机,伏笔。

Day 1 正式赛

开赛前选手登入系统在 OJ 等待比赛时发现全部都是白屏,经过短暂思考突然意识到可能是选手机网络全宕了,紧急宣布延迟开赛,排查发现是换的新交换机有问题,总之是有惊无险地恢复了正常。

其实这时候我没啥事干,所以摸了份题面在看。

我并未参与出题工作,因此此时是我第一次认真思考题目。

凹包是个很有意思的题,基本上算是秒了,但是前期榜完全歪掉了,没有人做凹包。

别的题没看,哈哈。

赛后好像顽强拼搏奖给了个非有效提交啊,有点爆。

趣闻:扶苏老师的队伍本来应该是有希望快速冲出 B 题把榜带好的,但是该队伍在赛时发了一个 Clarification 询问简单多边形是否能有点存在多余两条边,令人忍俊不禁。

不过总之还是恭喜扶苏老师的队伍获得了金牌。

此外:来自四川大学的难题逆转小队在本年度的四川省赛中 AK,因此该队伍认为他们与电子科技大学出题组具有相当好的相性,但在哈尔滨站表现不佳错失金牌。

Summary

好像我过去也没干啥事来着,但是围观东林主办比赛提供了不少这方面的经验,必可活用于下次(下周)。

ICPC 成都站

电子科技大学本次同时负责 ICPC 成都站的命题与主办工作,我并未参与到命题工作中,因此,从主办的角度,感谢来自 csl 老师与 hydro 开发组的 panda 老师、undefined 老师的帮助,感谢 board.xcpcio.com 的 dup4 老师提供的外榜支持。感谢华为与非凸的大力支持。

此外,我们敬爱的学长 HeRaNo 不远千里从深圳赶来协助进行技术工作,非常感谢。

俊杰老师十分兴奋地想要主持本次比赛的直播与滚榜,感谢他的倾情讲解。

Day -?

本次比赛计划全程接轨 csl 老师与 hydro 开发组主导的国内 ICPC 比赛技术路线。

所以定制个镜像先,从 csl 老师的 CAICPC 镜像加了个公钥调了一下预设的服务器 IP 就打包了。

很惊喜的是打包一次成功,甚至震惊了 cls 一把。

扔到 vmware 测了一下镜像和 xcpc-tools,大致上搞明白了这玩意该怎么配置。只不过 vmware 分的性能比较烂,摄像头推流(也许应该叫拉流,乐)只能正常播放上方 1/6 的屏幕,但能跑就行。屏幕推流跑的比较好,但是帧率就拉不上去了。

基于 xcpc-tools 的打印服务和气球小票服务都是之前四川省赛使用过的,自信即巅峰。

Day -5

是的,Day -5,周一,我此时刚从哈尔滨飞机回到成都落地。

就在今天,Facotorio 发布了其 DLC,包含大量全新机制。

好玩,推荐大家玩。

Day -2

本来计划在选手机上有摄像头可以给大伙直播选手动态的,但是会务公司表示摄像头搞不定,只得作罢。

下午四五点地铁倒网约车到了赛场,vy 正在安装比赛所需要使用的服务器,会务公司不知道是以什么心情将选手机的镜像安装在了服务器上,所幸时间尚早且经验丰富,赶在晚饭前调好了基本的服务器配置。

选手机没装好,但是要了一台选手机来测试,发现上面还有之前远程连接测试系统用的 ToDesk,先猜一手这就是上次远程测试用的选手机,其他选手机都是正常的,先相信,再相信。

然后就被背刺了,所有选手机都装了 ToDesk,非常震撼。

所幸我们有 xcpc-tools 提供的批量 ssh,只需要跑几个指令就可以全卸载掉。

把需要跑的指令写成了四个 .sh 脚本,被 vy 喷了,他觉得写成脚本不如直接在批量 ssh 里执行了完事,是纯粹降低效率的事。后来的实践证明我做的是对的,暂且按下不表。

尝试配了一下禁用 U 盘,大失败。

HeRaNo 飞机落地成都,和他一起睡大床房来着。

睡前做了一个祝融星绿带超市。

Day -1

给选手机批量下发初始化脚本,大部分机器都连上我的服务器了,但是看不到屏幕推流。

仔细思考了一下发现是忘配锁核了,配完以后用 htop 看了一眼占用,15 帧吃掉了单核的 70% 性能,超级清晰,顿时感觉选手机好像性能还行的样子。

纠结了很久禁用默认账户使用 passwd -l 还是修改为强密码,最后选择了强密码方案,因为锁定账户还是太过于危险了。

发现禁用 U 盘失败的原因是把 Identity 敲成了 Identify。

下午去华为参加了技术二面和主管面,从两点多一直搞到快七点,看记录好像赛场那边不会配选手机间隔离,想要重装系统,但是没有成功做出 PE,乐。

晚上八点发现有 monitor duplicated 的报错,经检查发现居然是两台机器的 mac 地址重复了,紧急(耗时半小时)喊人启用了一台备用设备。

然后发现 xcpc-tools 后台宕了一百多台选手机,一番我也不知道咋回事的捣鼓之后全上线了。

然后又出现了一对神秘的 mac 地址重复,这回选择改配置文件强行修改 mac 地址,挺成功的。

寻思既然都挺成功的不如 reboot 一下,紧接着后台就刷了十台机器的 monitor duplicated。

显然,如此规模的 mac 地址冲突是不现实的,一番头脑风暴后 panda 老师指出 monitor duplicated 其实是选手机心跳失败。所以实际上就是网挂掉了而不是 mac 冲突了。

呃,其实也不好说哪个更让人高兴一点,至少知道了 mac 地址确实不是动态的还挺让人高兴的。

不知道为什么反正机器是自己修好了自己,最后还剩下一台顽固的机器一直在 err,过去看了一下发现是粉丝检测错误没有粉丝,需要手动敲一下回车才能开机。

然后发现 IP 会变,紧急要求会务公司改成静态 IP(偷窥了一下交换机后台好像是改成了什么静态 DHCP?那是啥啊)。

到凌晨的时候会务公司开始配选手机间隔离了,配了好一阵子过后,已经是凌晨一点了,讲可以在网段间隔离,网段内部没法隔离。能设置防火墙的路由器需要隔天租过来。

少女脸红胜过一切言语.webp

紧急和教练打电话告知此事。

总之是在蔡队的提醒下想起来可以直接写 iptables 屏蔽非服务器来源的入口流量,算是把选手机间屏蔽解决了。

导出了一份 ip 和座位的 json 扔给了 HeRaNo 就回酒店了,他在酒店加班把热身赛要用的(为什么不是正式赛呢?哈↑哈↓)IP 自动登录搞了出来。

Day 0 热身赛

给选手建新用户,这样就可以避免选手使用默认用户时可能会造成的不利影响。

选手入场时突然发现 jiangly 就坐在入口旁边,现场围满了哥哥的粉丝,导致入口被堵死了,大失败。

热身赛开赛时发现打不出气球,检修后发现是需要设置小票机的共享,总之在堆了上百个气球以后终于是开始吐小票了。

然后就爆了,有选手开始反馈无法自动登录 Domjudge,发现是 IP 与前一天晚上导出的表有差异,遂去质询会务公司是怎么配的静态 IP,得知有五十多台选手机忘了为什么了没有配成功。

那我寻思你没配成功你告诉我一下啊,想去亖。

紧急给出问题的选手分发了 Domjudge 的账号密码,并要求会务公司在热身赛结束后把网络改成纯正的静态 IP。

赛时一直有人踹掉网线不谈,errMachine 感觉有超过一半的时间都是不正常的。

服务器跑的倒是还行,有个队伍交了七千多发,总计提交数超过了五位数,并未出现过于严重的排队评测,这方面至少是放心了。

为了确保静态 IP 设置正确,速通了一下 bash 语法写了一个从座位号生成 IP 配置文件的脚本,下发到所有选手机上,发现多了一个 . 遂重新下发了一次,找了一个选手机看了眼没问题就批量 ssh 开跑了。

跑完发现宕了六十多台,检查发现是删掉 . 的新脚本没有下发下去。

哥们,你前后两条指令都下发下去了为什么就你没有啊,怎么还是有的选手机有有的选手机没有啊。

然后就很完蛋,因为这六十多台的配置文件有问题,所以根本连不上网,也就无从谈起从后台 ssh 来修的事。

当机立断决定动手逐个改配置文件,所幸在下发配置文件之前设置了自动登录到默认用户,并设置了一个比较短的默认账户密码,大概二十秒就可以 sudo su 完去配置文件里删了两个点保存并重载网络服务。

反正搞了一个小时把网络搞好了,批量重启三次确认 IP 都没有发生改变,删掉热身赛的用户再重建了一个就下班了。

Day 1 正式赛

经过了 Day 0 一天的拷打,现在的 UESTC 技术组是无敌的!!!

然后就爆了,选手入场安检太慢导致快开赛了还没进完,迫不得已延迟了五分钟。

出师不利通常意味着一天的运气都好不了,开赛没多久就有选手机报告一直卡死,更换备用机。

这时候就显示出把指令整理成脚本的重要性了,ssh 上去粘贴指令运行完就是一台能用的选手机。

然而过于早的启用备用机使我感到不安。

更不安的是气球小票机,使用的是新的带切刀的小票机,虽然带切刀确实免除了人力剪开的时间,但是这小票机吐小票实在太慢了,队列开始逐渐冲上 300。

赛场上大约平均每十分钟就会出现一起黑屏死机断网等事故,主要问题在于选手机配置以及网线太松容易被踹掉。难绷。

正式赛中后期意外的没出啥锅,除了 xcpcio 外榜因不明原因宕了,等到 pskkk 提醒我济南的榜恢复后重启推送程序就正常了。

封榜后又爆了,开始大量出现机器问题,甚至比赛最后七分钟又出现机器存在反复死机的情况,但我更有水平,我只花了两分钟就把换上去的备用机配成了能用的状态。

至于选手可以用剩下的五分钟干什么?我不知道,也许能有奇迹呢。

赛后讨论了一下感觉没有必要锁屏,让选手多看看自己的代码和封住的榜也没啥不好的。就下去逛街去了。

逛街的时候发现一个花屏的显示器,感觉巨大幽默了。

滚榜 bgm 是 Reach for the Summit,整挺好。

晚上去恰的味之绝庆功。

Summary

批量执行的危险操作一定一定要有附加一个回报确认正确收到指令。

本来觉得现场选手机这么爆要被喷了,但好像意外地感觉大家对这次的主办工作评价还不错,万分感谢大家的理解与支持。

此外:难题逆转小队再一次银首痛失金牌,十分可惜。

此外外:来自上海交通大学的电光火石的前奏队伍获得了本场比赛的银牌第一名,他们在哈尔滨站也取得了银首的位次,同样十分可惜。