第二十届四川大学程序设计大赛(2022SCUPC)游记

背景

5.20日打完了初赛, 打得一般, 恭喜刘爷队AK! 但很好奇初赛第三是哪个神奇队伍.

比赛日

早上做了个梦, 梦见自己打完了比赛和别人去吃饭了没去颁奖典礼, 然后奖牌没了, 乐, 然后起床发现昨晚忘跟 npy 晚安, 自己倒头就睡了... 还好她没等我回复, 问题不大...

早上九点多, 到了集训室, 然后拿了衣服就被赶出来了 XD

后面的队是刘爷, 捧杯队! 他们最后15分钟 AC 2 题也太激情了

然后就等到12点开始比赛了, 中途回去拿板子还被夏学姐全程盯防哈哈哈

0-1h

上来开题, 先看到 I, 感觉盲猜一个决策贪心, 然后看了十分钟没看懂样例, 原来输入还可以这样生成, 后来也没有思路, hls 说 H 题像是一个签到, 但是不确定题意,
按照他的想法, H 题就是个弱智题(事实也是), 然后我读题, 感觉是走直线, lls 也赞同我的说法, 想了几分钟, 给hls喂了一个解法了, 虽然感觉这道题甚至不需要板子, 即便按照我的做法加上
Acwing的群友 20分钟 拿了这个题的一血, srds 能敲还是敲吧, 然后就敲了二十分钟板子...

敲完了, 好, 小调试一下, 没有问题, 冲一发, WA, 懵逼了几分钟, 队友说问题意, 然后问了一下, 发现居然不是走直线??? 然后就立马改代码, 两点如果距离圆心距离与半径的差如果异号, 那就会碰撞这个圆环.

交上去了 \(66min\; 2tries\) , 十分弱智, 点开榜发现 rk 好像还可以, 原来这就是校赛🐴?

1-3h

过完 H, 发现把握不住过了C, 遂去看C, 题面还算友好, 询问构造方案数...

怎么又是构造方案数, 那就浅浅的先试试构造吧! 画了十分钟, 几乎hack掉了构造的想法, 然后又想了一想是不是可以爆搜, 计算了一下 复杂度不够, 队友提出上机打表找规律 (实话,感觉这题不适合打表找规律),

然后我又想了几分钟, 在想怎么优化搜索, 艹, 现在发现我居然潜意识的按照 lyd 的想法, 优化搜索过程设计 dp 状态, 是的过了一小会儿, 好像找到了递推方案.

  • 现有两个数 \(a,b\) , 且 \(a<b, a + b = x^2\), 那么很容易得到 \(2*x<b<= n + a\), 那么如果只考虑这两个数, 显然从最后两个数开始考虑比较合理, 从后往前转移
  • \(f[a][i]\) 表示数 \(a\) 在从左往右第 \(i(1\leq i\leq 4)\) 个位置的方案数, 那么 \(f[a][i] += f[b][i + 1]\) , 转移必须满足 \(b\) 是上述所有合法的 \(b\)
  • 这样来看, 恰好可以满足 dp 的无后效性和最优子结构, 统计答案就累加 \(f[a][1]\) 就好了.
  • 至于找 \(b\) 的过程, 就按照式子二分所有平方数就好, 建议后面跟个无穷大, 好搞边界, 时间复杂度 \(O(nlog(\sqrt{2e5}))\)

然后给队友讲了一下, 让一个人跟我一起写代码, 不到10分钟🐴完了, 但输出十分不对劲, 找了几分钟发现有个地方写的很弱智(8懂, 但我和队友没看出来), 然后就改了一下...

稍稍检查一分钟, 交了一发AC, \(139min, 1 try\) , 点开榜发现 rk8 , 直觉感觉似乎已经银牌了.

3-5h

过完 C , 到处找题, 榜上只过了一个 G, lls在看, hls 在看一道寄几, 然后我去看了下 A, 感觉题目性质很特殊, 好像可以主席树处理初始的各节点逆序对个数, 看起来很好做但主席树写的不多, 但即使能预处理, 但是好像不太能支持对旧版本主席树的修改啊

又想了想, 即使在线好像还可以离线做(事实是并不行) 似乎可以 DFS序+莫队+线段树+树状数组 来做, 复杂度估计 \(O(n*\sqrt{n} * logn)\) , \(n=1e5\)

题目给了 \(10s\) 时间限制, 不过 \(T\leq 10\), 看起来好像挺卡, 给队友说了一下, 让我先去写(赛后来看, 如果队友懂莫队我可能就不会写了, 再企图拿莫队冲在线还不用带修莫队我就是傻逼),

然后就开始抄板子, 半个小时抄的差不多了, 开始处理询问, 发现很棘手, 因为我还要预处理 DFS序 上各点原本的逆序对个数, 然后干脆把这些全部当做修改来处理, 此时我还没意识到事情的严重性.

hls 想出了 G 的换根做法, 中途就交叉上机写, 换了几次, 越写越麻

写到最后输出发现, 似乎莫队离线的本质是, 修改之间互不影响彼此的统计结果, 但我以为这道题的特殊性质能让我离线掉, 然后就弃题了, 200行代码 (好演员)

最后半小时和队友 all in G题, 给我讲了下换根的做法, 但听起来不是很明白, 可能我自己也不太懂换根? 只写过几道wls的题目, 和听了wls 的换根, 队友两个数组似乎只能统计出子树的贡献

我感觉要换根的话, 还要开个数组记录一下父亲的贡献, 最后统计节点的答案, 但队友写的似乎很难写的通, 补题开了之后 hls AC了, 看了下代码, 确实是需要再多开数组来写, 可惜最后没写出来

赛后滚榜

由于知道自己寄了, 所以心理预期不会很大, 滚榜的榜单没有计算罚时, 然后居然被 ddl 们超了, 简直集训队耻辱,

好在正确的榜单上, rk9 银牌, 集训队垫底(不计算有一个队少了个人), 没有被萌新一队(ddl)们超过, 就还能接受, 拿到了 100rmb 的奖金... 聊胜于无.

总结

由于个人能力的缺乏和决策的不妥, 没有金是理所当然的, 再接再厉吧...

希望下周的集训队个人选拔赛能打好点... 然后就滚去补作业吧!

最后吐槽一下 C 题, std 记忆化搜索复杂度看起来很卡 \(\leq 1.5e8\), 时限却只有 1 s, 感觉换牛客评测姬说不定就 TLE 了, 而我的做法可以把 \(n\) 开到 \(1e6-2e6\), 远比 \(1e5\) 大.

讲道理, 我这 C 题做法, 给我多算一题不过分吧(bushi)

posted @ 2022-05-23 15:02  Roshin  阅读(79)  评论(0编辑  收藏  举报
-->