CSP2020暴毙赛

测了一下官方数据,40+85+70+20=21540+85+70+20=215 ,竟然没有一题是 AC 的。。

失分情况

T1

这毒瘤题把人搞傻了,最后调到公元1600年前一定正确,之后的出了点神奇的错误(公元 1582 年 10 月 15 日(含)以后的闰年写挂了)

T2

这题应该挺简单,没上 9595 因为

1
2
3
4
5
for(int i=0;i<k;i++) if(!((sta>>i)&1)){
if(check(i)) {
sta|=(1<<i);
}

1后没加ull,但我记得应该加了吧?!毕竟在算答案的时候都有(莫非手抖没保存)

1
2
3
4
5
6
if(t<64) {
ans=(1ull<<t)-n;
}else {
ans=(1ull<<63)-n;
ans+=(1ull<<63);
}

还挂 55 分因为 n=0264n=0,2^{64}unsigned long long ,要特判。

T3

当时被 T1 降智没仔细想,暴力+线段树竟然拿到 7070

回过头看也挺简单,考虑每个单点加的贡献为 加的值 乘上 它之后乘法的积 ,将操作到序,在拓扑图上打标记,最后搜一遍统计贡献即可。

T4

没时间想,只打了 n=3n=3 的手模。

考场开题情况

先只看了 T1 ,细细品读后感觉写起来会很毒瘤,然后开始写,写的时候被恶心到了,经常出现 <,<,\le 、取模天数相差11 导致出现一些神奇的日期,调到 1.5h1.5h 发觉情况不对,上个厕所清醒一下做 T2。

发觉 T2 挺水,到 2h2h 时调完并检查,没去想 n=0n=0 的特判,

看完 T3 ,T4 ,先想 T3,到 2.2h2.2h 时还没思路,自闭了,就打算先写暴力,2.8h2.8h 时调好 线段树暴力,小样例过了,大样例显然TLE。于是想 T4 ,一开始想了一个假贪心,然后发现它确实假了,再次自闭, 已经 3.2h3.2h ,先写了 n=3n=3 的手模,感觉 n10n\le 10 写个搜索之类的也可以骗点分,但是实现起来极其繁琐(估计哪里想错了),于是在 3.5h3.5h 时放弃,回头看 T1

测出了几个在公元 1582 年 10 月 14 日之后的错误,把公元后的代码重构了一遍,“距离考试结束还有15分钟”,当时十分紧张,还有 1600 后 1000 年一周期 没写完,到结束时还没调好,T1 最多只有 4040 了。。。 自闭ing。

总之,T1 把我心态搞炸了…

反思&经验

  1. 应该先把所有题过目一遍,(跳过T1先做T2,心态应该会好很多)
  2. T2这种爆unsigned long long的考虑还是不周全,要考虑一下极端数据。
  3. windows 和 Linux 命令不同,Linux 比较文件 diff file1 file2 ,加 -Z 忽略行末空格,或者 vimdiff file1 file2 对比更清晰。而 windows 下 fc file1 file2 ,加 /b ,逐行匹配加 /l
  4. 像 T1 这样的题,应该再打一个纯暴力,方便调错。
  5. 合理分配时间, T1,T2 这种应该耗时过长应该先放一放,冷静一下。

比较合理的时间规划:
025mins0-25mins 看完所有题,心里有个数
2580mins25-80mins 应该能把T1,T2敲完吧,(只要没有儒略日这样的毒瘤),卡住了先过
80120mins80-120mins 想T3正解,如果暴力好敲的话迅速敲完方便之后对拍。
有想法就先在 160mins160mins 前写完,不然看 T4,与T3同样,T4肯定比较难,多写一点骗分。
240mins240mins 后先检查文操,文件目录等,T1,T2 再想想有没有没考虑的,最后还有没调出来的继续调。