语言漩涡

thirtiseven 的博客

0%

非法参赛

一些比赛的赛后复盘。

thirtiseven & limbo_wg & Simon

2018 Season

Bad End.

The 2018 ACM ICPC China Shanghai Metropolitan Invitational Contest

这次自费去上海大学,还是我、wanggann 带了一个学弟 Simon. 非常迷,赛前三天教练群才出通知,急匆匆的决定就报名了。也是带一下可能可以进一队的 Simon 体验一下现场赛的感觉。队名叫做 学姐带我躺,wanggann 起的,也非常迷。开幕式得知是 kuangbin 出题!见到了 kuangbin 真是太棒了。

热身赛

比赛是在机房,进去的时候题目已经摆在桌上了,thirtiseven 看了一下发现 B 是水题,翻转数组就可以,然后 wanggann 开场就把 B 过了。然后发现三题都不会,A 是个线段树,区间乘法膜2018,区间求和,C 是求A^K!%2018 ,D 是个 DP. 然后一个人看一题卡到结束,打铁了。旁边华东理工的队伍就来了个妹子,然后把我们吊打233 好帅啊。后面是山东大学捧杯队和热身赛没出现的“我一定来”队。队名还是很有特色。热身赛打铁之后吃了个饭摸摸鱼就正式赛了,由于正式赛在下午,所以并没有发吃的qwq

正式赛

比赛开始后,Simon 从前往后看题,thirtiseven 从后往前看题, wanggann 在中间随机看题,看榜。

thirtiseven 觉得 J 可以分块打表,先放在一边,读了一个 G 的假题意,觉得算一下外接圆就行了,也先放在一边,看到了 D ,发现是个简单计算几何,打算中期推个公式。

这时候听到隔壁妹子说 K 题,看了一眼,发现是个矩阵乘法板子题,这个时候 wanggann 正在写 B 遇到了一些困难,(根据他的题意)想了一下,大概是个背包,然后因为数据范围小(不会DP),他开始写 DFS, 终于交了一发,WA。

然后我们拉住志愿者问怎么打印,她教会了我们错误的打印方式,打印了 B 的代码,thirtiseven 开始抄矩阵乘法板子,中途 wanggann 改了一下 B,WA,同时打印还没有送到。

thirtiseven 抄完板子,过了样例,交了,pending 的时候发现没打 Case ,加了 Case 又交了一遍,correct, K50min 2A。

thirtiseven 继续写 J 的分块打表,写了一下发现表打不完, 下机, wanggann 继续改 B。

这时候 thirtiseven 发现 B 的题意读假了,只需要把所有因子加起来就行了,wanggann 很快改完提交,B56min 3A,排名血崩。

这时候 Simon 已经看了一段时间的 D,然后三人讨论了一下,Simon 推出了公式,wanggann 开始敲 D 题,很快敲完,提交,D98min 1A。

这时候过了的题主要是 F 和 J, thirtiseven 仍然在想怎么打 J 的表,上机尝试了不同的打表姿势,浪费了很多时间。

Simon 正在思考 F, 推出了只有一个圆的情况。A 是个离散的圆面积并,大概是个数据结构题,但是感觉无从下手。

wanggann 和 thirtiseven 正在思考 J ,没有任何进展。这个时候排名到了一百多名。

三个小时的时候发现有一些队伍过了 A 和 I, wanggann 和 thirtiseven 口胡了一下 A,口胡出了一个随机的做法,然后 thirtiseven 上机敲 A ,wanggann 和 Simon 仍然在思考 J。 A 的随机方法很快写完,提交,判题花了很久,然后过了, A195min 1A,这个时候排名34。

wanggann 和 Simon 在讨论 I,Simon 提出了一个贪心做法,讨论觉得可能可以,手玩了一下可以过样例,于是 wanggann 开始敲。敲了一半 thirtiseven 造出了一组数据,将 Simon 的贪心叉掉了,Simon 思考了一会儿,发现需要特判 0 的情况。于是加了对 0 的特判,然后又造了几组数据测试了一下,没有问题,提交返回 WA。

wanggann 开始修改代码,改着改着觉得原来应该是对的,然后又改了回来,这时候 thirtiseven 一直在致力于造出一组贪不了的数据,然后 Simon 在手玩贪心,wanggannn 在测试。

这时候 wanggann 突然发现原来 20*20 == 400, 而代码中写成了 80,改正后直接提交,I285min 2A,看了看榜,应该可以稳银牌。

然后开始娱乐性提交,交了一发 J 的暴力,然后交了 4 发 G 的随机,可以说把有思路的题都交了一遍(不是),然后三个人开始吹逼。

题意/题解

A: 给出一堆平面的点和一个比例p,判断是否存在p比例的点在同一条直线上。 每次随机取两个点,O(n)的判断有多少个点在两点式的直线上,比例超过p就存在。 随机1000次,都不行则不存在。因为最多1e4个点,所以易知正确性可以保证。

B: 求一个数的所有因子相加是否等于它本身,枚举因子相加即可。

C: 求两个空间线段的最短距离。 高精度,精确到1e-30,不会

D: 一个正n边形,每次把每一条边的中点连成一个新的正n边形,问如此操作多少次面积小于L 注意到每次缩小的比例是一样的,推公式迭代即可。

E: 一个字符的项链,可以修改两次,求最长回文子串 两次二分?二分中点然后哈希? 反正不会

F: 一个矩阵里面涂黑一些圆形区域,问有多少格子没被涂黑。 不会,出题人说是树状数组啊?

G: 问一个四边形是否有外接正方形 旋转这个四边形,看外接长方形的长和宽是否相等,再二分一下。 不会

H: 区间平方膜2018 区间求和 不会,说膜2018有个性质是它是循环的,线段树维护循环节

I: 给一个矩阵,每次可以 +1 或者 -1,求最小的操作数,使得矩阵每行的和相等每列的和也相等。 枚举 lcm(m,n) 的倍数,求出答案,取最小的(大概是这样,不是我写的 kuangbin:你们好像都是用贪心贪过去的,但是我出题的时候的做法,是一个最小费用最大流

J: 前n有多少完美数,即数字之和为它的因数。 数位dp,不会 kuangbin:这题就是个简单的数位DP,由于式子太复杂,ppt上就不写了

K: 矩阵乘法

L: 快速数论变换 NTT 不会

总结

  • 读题的问题还需要解决,题意要两个人明确。
  • 不要盲目跟榜,冷静地阅读题目,分析是否可做。
  • 还是太菜了。

2018 ACM ICPC Nanjing Regional

复盘

开场,Simon从前往后开题,thirtiseven 从后往前开题,wanggann 随机开题。

Simon 发现 A 是一个博弈裸题,而且发现已经有人过了,把结论敲上去提交 WA,发现题读假了,取石子需要取连续的标号,thirtiseven 和 Simon 开始推公式,wanggann 继续看题。

wanggann 发现 C 可做,上机敲 C 的 dfs 解法,期间 thirtiseven 上机改了 A 题,特判 k=1,其他先手必胜,交题返回 WA。

这时J也过了很多,thirtiseven 和 Simon 讨论了一下,没有任何思路,于是继续推 A。

wanggann 继续写 C,C 此时没有队过,但是 wanggann 觉得没有问题。写完之后提交返回 WA。于是暂时放弃 C 题。

期间 thirtiseven 玩出了 A 题的一组假的测试数据,Simon 也玩出了一组假的测试数据,找到规律提交了返回 WA。

又有很长时间没有任何进展,Simon 这时发现 A 当时的做法有一处爆 int,改成 long long 提交,返回 WA。

这时 wanggann 发现 I 是一个二分图匹配,和 thirtiseven 讨论了一下感觉可做,于是 thirtiseven 上机抄匈牙利板子,改了改,没过样例。

Simon 发现 A 题的测试数据有问题,并认为除了 k=1 其他先手必胜是正确的,然后 thirtiseven 看了一下数据范围发现 n 可以 =0,加了特判提交,返回 yes,此时是155分钟,比赛将近过半。

thirtiseven 上机在 wanggan 的指导下改 J,把两次匈牙利改成了一次,通过样例,提交返回 WA。

wanggann 认为连边出现了问题,重新给点标号,通过了样例,提交返回 WA,然后打印了代码。

Simon 继续推 J,wanggann 和 thirtiseven 对着打印的代码看了很多遍,觉得没有问题。

wanggann 又把一次匈牙利改回两次,改了 memset 和 return 0,提交返回 yes。

这时是196分钟,通过两题,然后又开了两题,wanggann 读完D题,发现是个最小球覆盖,从上交红书上找到了模版开始敲。

G 是一个计数题,thirtiseven 和 Simon 开始推式子,J 题此时基本全场都过了,我们完全没有思路,已经放弃。

D 的模版敲完,调了调,通过了样例,提交返回 yes,这时是237分钟,我们排名两百多名。

wanggann 也开始看 D,thirtiseven 推出了一个n^2的和式,打出表后 wanggann开始找规律。

wanggann 发现 G 在二阶差分后大部分是个等差数列,开始思考如果真的是等差数列怎么写,Simon 将 n^2 的公式化简得到一个可以直接计算的公式,转化为代码,未通过样例。

大家一起重新化简公式,这时 PC^2 很不稳定,裁判宣布比赛延时 10min。

thirtiseven 发现有一个次数不对,重新敲了一遍公式,通过样例。

这时离比赛结束还有10分钟,Simon 上机默写了逆元模版,wanggann 将所有的除法改成逆元,在乘法处加取模,改完之后通过样例,提交之后返回 WA。 thirtiseven 将每个数都改成 long long,提交之后返回 WA。

wanggann 多加了几处取模,检查了逆元模版,提交返回 WA,wanggann 试图将减法放到后面,修改后未通过样例。

ctrl-Z到之前的版本,重新加了一遍取模,把数据类型改成 unsigned long long,提交之后返回WA。

thirtiseven 试图用 python 自带的大整数重写一遍,正在修改逆元时,裁判宣布比赛结束。

赛后5分钟发现就是因为减法爆了逆元,重新调换了顺序通过了样例,可惜无法再提交了。

(229/332 Honorable Mention)

暴露出的问题

  • 博弈论没人会
  • 字符串没人会
  • 计算几何太依赖模板
  • 前期签到题过得太慢
  • 签到题没有仔细思考就放弃
  • 有两道(可能)会做的题没有读
  • 开场开没人过的题
  • 签到题的题意读错
  • 比赛末期太过急躁 不够默契
  • 三人分锅出现问题 分到的题不是自己擅长的
  • 开题策略问题严重

解决方法

  • 平时在刷专题之余增加水题/思维题练习
  • 学习博弈和字符串知识
  • 刷一些乱搞几何题
  • 调整状态 勤加思考 不要轻易看题解
  • 每道题至少需要两人确定题意
  • 多训练磨合比赛默契和策略
  • 提高debug能力 出数据能力和阅读代码能力
  • 提高1A率 减少罚时
  • 没人过/代码量大/乱搞题不宜开场开
  • 心态不宜急躁
  • 更换比赛策略:前期签到题/三个人都会的题三人同时开 后期再考虑多线程
  • 不宜在一道题上卡太多时间

2018 ACM ICPC Qingdao Regional

打完铁的当天晚上 ,我和 wanggann 打了一场 atcoder,因为晚上有一场 atcoder,而我们也不知道有别的什么事情可以干。

在体育界,著名的运动员们退役之后要么继续在体育界发挥余热,要么撑着老迈的身体一次次的复出,更多的则是泯然众人。在最后一次比赛失败之后,终于明白自己已经没有下次了,回到空荡荡的训练场,这是一种什么样的心情呢。我自然不是拿自己和职业运动员相比,但是 icpc 不说是个体育运动,至少算是电子竞技。作为选手,没有出一次线,心里总是有不甘的,更不用说铜牌都打不到的自己了。在过去两年中,我荒废学业,放弃社交,把几乎所有时间用来训练,可能是我摸鱼的时间太多,可能是训练方法不够科学,也可能是本身就不适合这项比赛,两年下来,区域赛成绩是铜铁铁铁。

多么绝望啊,去年我们在西安,三个第一次打比赛的萌新 0 dirt 签完了到,自闭了两个小时,拿到了铜牌最后一名。本以为来日方长,希望无限,结果却一场不如一场。今年暑假我们在上海,写了五个题,拿到大都会赛的银奖,而还有两个全场都会的算法根本没有练过。当时我们想,暑假练一练,把各种基本算法都学会了,区域赛说不定真能拿个银牌,然而区域赛却在签到题上栽了大跟头。上个月我们在南京,一道签到题签了两个半小时,另一道没思路直接跳过,开的题是二分图匹配,几何,组合数学。组合数学差了五分钟,错失铜牌。回来的路上我们在车上看没看的题,发现一共至少会做七个。虽然这只是弱者的意淫而已,但是我们却很有希望:这段时间,我们天天训练,找到状态,青岛一定能拿奖的。之后我们真的几乎天天训练,每天晚上上完课就开一套套题,周末是两套,虽然罚时仍然爆炸,但是名次到最后也至少能拿铜,有时,离银牌只差几名,来青岛前两天,我们VP了 2017 浙江省赛,做了六道题,离省赛金牌只差一点。然后就是现在了,我们又打铁了,只是这次再也没有下次了。

复盘一下吧。比赛开始,我配机器,wanggann随机开题,Simon从前往后。wanggann 发现J是水题,和我讲了一下,没啥思路,这时看了看榜发现M过了一片,Simon上机写M。M的确是水题,Simon写完之后提交,返回WA。Simon发现写错了,改正后提交返回WA。大家一起查错,发现是算法有点问题,然后大家都比较急躁,在细节的地方都想改成自己的风格,发现了一种没考虑到的情况,提交返回WA。这时发现有个地方写错了,提交返回yes。M 48 分钟 4Y。看榜发现C和 I 过得比较多,我看C,他们看I。他们讨论了一会儿I,发现看错题号了,实际上的签到题是J,我推出了 C 的式子,上机写 C,准备提交时被 wanggann 拦住,和他讲了一遍算法,他找出了一个错误。修改后提交返回WA,然后我发现有个地方没乘2,提交后返回 yes。C 108 分钟2Y。

然后悲剧就开始了。我下机后仔细观察了一下J,说,二分。大家一致认可,讨论了一下特判的情况后,Simon 上机。样例通过后,提交,返回 WA。然后便是无尽的“修改了一个小地方,提交返回WA”。后期怀疑是算法假了,但是一是找不到反例,二是暴力check了一下返回TLE,所以认定是二分写错了。但是看着一份代码怎么看都看不出错,非常绝望。十二点半的时候我们决定读其他题,但是心中始终不能放下J题,不时改一改再提交一遍,新的题也没有思路,我推了半个小时 L 的组合数学,一无所获。wanggann 在还有二十分钟的时候开始写 F ,提交返回 WA,最后两分钟,我们绝望地盯着 cb 上 J 题的六份代码,不明白自己是哪里错了。最终 J 题交了 14 发仅仅修改了几处语法的假算法代码,而没有人仔细思考一下是不是还有别的算法。全场 374 个队,我们排名 348。我们应该是 374 个队伍中排名 348 的队伍么?或许的确应该是吧。