重庆西南附中集训总结Day16
For:2024/07/23
模拟赛:100+0+0+0=100,时间分配不明智,代码调试时间还有点长,想到的做法大多假了,还得多练。
模拟赛
7点半下发了文件,配置机器,做了些杂事后就快8点了,看了看所有题,开了T1。
-
T1 克莱因瓶 (klein)
题意为 有张 \(n*n\) 的网格图 网格为四联通,上下边界循环,左边界 第 \(i\) 个格与右边界第 \(n-i\) 个格连边,求给定的起点走到终点的最小步数。\(n\leq10^{18}\)
考场上看到了 \(10^{18}\),不用多想 \(O(1)\) 的直接输出答案 结论题,于是开始在草稿纸上画方格图,虽然很简单,但是画了很多遍,原因有 看错题连错边了,图画的丑了等等,最后画了一面纸,正常实属不应该,得改掉。
解法:显然左右边界连的特殊边不会走第二遍,优先考虑横坐标,分类讨论走不走特殊边,在考虑纵坐标,往上走和往下走取近路,答案可以直接算出。代码写完还重构了一遍,属于浪费时间了。
-
T2 可重集 (multiset)
给出正整数 \(n,k,m,\) 表示 \(\forall N^+\,i\in[1,n]\) 都能选 \(k\) 次,你需要从中选出若干个数组成可重集,计算选出的可重集的平均数为 \(x\) 的方案数,对所有正整数 \(x\in[1,n]\) 求解。
看见这道题时还是有点高兴的,很明显的分组背包变形。
吸取上回经验,想把暴力部分分先打了,但是调暴力调了近一个小时,???,先打的dfs暴力,从前往后搜选出数的和与个数,想着实在不行就搞记忆化,打完了小样例没过,很纳闷,开始检查代码推样例,发现两处错误,一是没初始化,二是如果记录总和而不记录平均值的话,空间会爆,而且我用的和最大值是错的,当时并没有这么顺利,想了想认为可能是得广搜,因为深度浅的还没算完,于是又打了bfs,结果输出的结果与dfs一样。。。最后也是发现了错误,调好了。
开始顺着多重背包想正解,之后写出了两种方法的dp,因为状态枚举数和会爆空间,发现后就去写了状态枚举平均数的dp,枚举每个数选几个,然后从数和可以整除个数的状态转移方案数,之后打完代码,样例不对。。。
一开始是质疑自己板子背的不熟,二维一维两种板子的来回写,对于边界也是修修改改,事实上并不是,以后还是要清晰模板代码,不然这里也不会误入歧途,最后来回推吧,也是到点了,交了暴力,结果证明暴力就是会爆空间,而想到的dp做法也假了,因为前面的数也有可能不整除,后面补上才能整除。直接 \(100pts\) 遗憾退场。
有个很大的问题,这几场模拟赛总是抓着假做法不放,最终分数空空,导致有的题的暴力分也拿不到,还有调代码的能力欠缺。
出分+订正
- T1签到题,不过也有人看错题挂了的,悲。
- T2是道⚪题,arc的,正解是用一个小技巧后,再做前缀和优化后的多重背包。
小技巧:设数的总数为 \(cnt\),则 \(sum\) 为 \(x*cnt\),因为不确定 \(cnt\) 所以不妨令所有数都 \(-x\) 转化后只需 \(sum=0\) 即可,转化后 \(<x\) 的数为负数,\(>x\) 的数为正数,只需求前后的绝对值相同的方案数即可,即做多重背包。 - T3也是道⚪,正解包括但不限于莫队,FFT等,但是放过了个 \(O(n^2q)\) 的暴力,只需容斥+计算方案数,考场没看,有点可惜。
- T4又是道⚪,但是不会。。。
下午 \(CF\;rank2\;JLY\),XDFZ的典范,大佬来讲题了,他出的题,但是 \(subtask\) 有所不同讲课说话和思路蛮清晰的,也非常注重部分分,也总笑。。。

浙公网安备 33010602011771号