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)

posted @ 2022-08-04 21:23  Displace  阅读(23)  评论(0)    收藏  举报