2022.08.04 NOI模拟赛总结
1.时间安排
7:30~7:50
T1:数学题,给一个数,每次等概率选择他的一个因子除以他,问期望多少次变成1,可以直接\(nlogn\)预处理做20分,答案似乎只和个质因子的次数有关。
T2:大型分讨题,初步口胡需要讨论9种情况,很麻烦,一档一档部分分写吧。
T3:给错误的求最大子段和算法(指只选非负数……),给定奇数位置的数和数的值域,构造序列使得正确的最大子段和与错误答案的差值最大,感觉是性质题。
7:50~8:40
先打了个暴力方便之后验证正确性,发现这玩意可以记搜,打了一个记搜自己测试可以跑动1e9,简单估算复杂度是\(\sqrt nlog n\)的。
答案显然是和指数有关的,但是暂时没想到有什么做法。
8:40~9:00
先打了个T2#后面一定没*的贪心,也没大样例,给的小样例太水啥都测不出来。
9:00~9:30
T3猜了个结论,填的数要么是-1要么是K,手构了一些数据确实是这样,同样没大样例也不知道正确性,就相信他了。
之后就不知道怎么做了……
9:30~10:00
写了T2开头就有两个*的部分分,同样因为没样例不知道正确性。
10:00~11:00
发现可以直接把指数按照最小表示法hash(反正是同构的无所谓),打表发现不同的状态数在1e9时只有5e5左右。
这样的话保证1e9能稳过了,但是DP的复杂度还是 \(\sqrt n\)的,不知道怎么写其他分。
试着跑了组1e18的数据,能跑,但是交到OJ上发现CE了很不理解。
本来就应该是跑不动的,就摆了。
11:00~12:30
大力分讨T2:
//case 1 : *#*
//get 2
//case 2 : .#*/##*
//get 1
//case 3 : *#.
//have>=1: get 1
//have==0: 后面有+1,后面没结束
//case 4 : .#.
//have>=2: pass
//have==1: 后面有pass,后面没结束
//have==0: 结束
//case 5 : ##.
//结束
//case 6 : *##
//pass
//case 7 : ###
//结束
//case 8 : .##
//have>=1: lose 1
//have==0: 结束
自己造小数据没啥问题。
(打错了分段,本来能80分……,还少讨论了.#.花费一个往后走再回收的情况)。
result:
T1:40 T2:20 T3:5
2.总结
T1:
跟正解差在DP上。
状态数打表发现最大数据档只有2e5左右,复杂度正确。
我的DP是 \(\sqrt n\) 的,瓶颈在枚举因子上,于是正解是对这里优化,做高维前缀和。
具体的,设 \(f[i][j]\) 表示状态i考虑前j为等于i的指数,后面的小于等于i的指数的所有数的DP值之和。
设 \(k\) 为i的第j的指数-1的状态,显然转移式为 \(f[i][j]=f[i][j+1]+f[k][j]\),其实这就是个半在线高维卷积。
因为j只有20(18个质数相乘就接近1e24了),复杂度就是 \(状态数*20*log\)(因为要最小表示法)。
%J神场切,之前也有一道类似的题,也是枚举因子可以转为高维前缀和,这是种套路,要记住。
T2:
无大语……
加上少讨论的一种情况直接A了。
分讨题怎么敢不给大样例的啊……
建议改为:本题无样例,选手自己造数据对拍。
T3:
看不懂题解在说什么。
(待upd)

浙公网安备 33010602011771号