[DMY]2024 CSP-S 模拟赛 Day 11

感觉这场打得不错。

T1 如果再好好想想就能跑到 31rk 了。

赛前

今天机房人比较少,HDS 和一些高二学长都不在。

赛时

浏览一遍四道题,感觉都不太可做。

T1

先开 T1,在纸上模拟了一下,发现暴力建图的话最后的边数会非常大。

先模拟一遍,交上去发现 WA 了一个点。

由于题目中提到了“允许重边”,所以在所有的建图部分都是用了几个桶排除情况,但是一直不过。各种调试之后,终于在 1.2h 的时候写完了暴力。

开始思考正解,发现想要降低复杂度的话最可行的是找规律优化建边方法。

结合题目要求,最小生成树的话我们只需要针对两个节点保证连通的情况下边权和最小。

根据定义,暴力情况下在做最小生成树的话对于一个度数很大的点一定是一片一片扫过其的边的,那么也许能对这种节点的建边方式进行优化。

但是想了一会并没有什么好的方法,胡了几个比如按顺序连边也不太多。

看了看别人的提交记录,发现没多少人过,所以猜测正解很难,就先跳了。

T2

看了眼 T2,感觉限制条件比较多,现在纸上画了画,发现 b 可以针对一个给定的 b1 转化为一些代数式,然后根据 bn 元素和前面元素的关系可以构成一棵基环树。

我对 a 排序以后大胆假设 b 是升序的,并且每个 a 是由相邻两个 b 组合成的。

设定 b 的第 1 个元素为 x,然后钦定 2n1 的元素,让它们都用含 x 的代数式表示,为了方便我写了一个一次函数类存储。

最后一个元素因为需要由两个 b 确定,所以我选择 n2 查找每对 bi 的代数式,尝试用它们组合成 bn

找到以后根据一次函数类中一次项系数(1或-1)的正负性分一下情况,第一种符号相同的方式直接判断,第二种符号不同的方式可以解一下方程,解是整数的话说明满足构造条件。

最开始写挂了(意料之中),发现按照 a 排序以后的 b 顺序可能不是最优的,但是感觉可以打打补丁。

想了一会以后搞了个随机化上去,每次重新排列 a 数组,重新构造 b,多算几次。

但是问题在于随机化以后还原数据不太会(出题人真的不能多测+只输出 Yes No 么),整整 2h 我都在搞排序使用的 id 数组,上个厕所回来发现我 b 数组的值并没有算错,但是对应顺序的时候出现了问题。

发现如果复杂度是 n4 的话对代码不太有利,所以还是需要考虑 n3 的解法。

观察组合规律,想用反 id 数组或者 pair 型的数组实现有序,但最后都失败了。

无奈开了几个 map 存储原数组每个元素,然后每次桶套桶去搞,终于把每次的复杂度逼到了 n3

搞到 11 点终于过掉了大样例。

感觉不太确定,卡了卡随机次数,觉得差不多以后就扔了。

看了看其他人,发现只有我 T2 此时是过掉的,感觉很有优势(我在想什么)

所以转头发现 T1 过了一车了。

赛后发现 70 分,改了次数以后也没卡过去。不过分比ANIG高

后面的题目,T3 胡了个暴力就扔了。

T4 最后 10min 想+写了一个 DP,只过了小样例,最后一分也没有,不过在意料之中。

赛后

T1 发现过了一车。按照同学的方法改了以后直接 A 掉,这个很好想,之前一场 ABC 的 F 题也有类似的建图套路,但是没想出来,导致挂了 80pts,亏大了。

T2 发现自己乱搞的做法分数还可以,但是低于赛时期望,尤其是当我发现找到以后得输出只有一次,所以我花 2h 逼到的 n3 复杂度根本没用,还不如 n4 无脑匹配,算是思路的局限性。

总体来说比前几场好一点。我猜是因为CM不在

这两场比前几场都好一点,应该是熟悉了题目套路和适应了比赛规则的缘故。

遗憾的是这两次的 T1 思路都是只差一点,导致挂了很多分。

以后需要加强写代码时对复杂度的判断和思路简洁化的能力。

posted @   Redamancy_Lydic  阅读(13)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示