NOIP2021游记
同机房同学的:lzqy_
11月8日至9日
期中考炸裂,之后开始在机房晚上集训。
11月20日
先用30min看了看题,大致感觉是这样:
T1是类似埃氏筛的东西,T2是计数dp,T3应该是数据结构,T4应该很难,但是暴力搜索应该很好写。
之后用10min写完T1,我用了并查集维护答案,然后测第四个样例时RE了,之后开始调。
然后直接调了1h,之后确定了错误是在并查集(之前没想到),然后发现是爆递归栈了(在Linux下不会有这个问题,也就是我浪费了1h)
发现这个问题之后我心态居然很好,写了对拍程序之后开T2。
想得状态时\(f_{i,j,k,S}\)表示序列确定\(i\)个位置的值,最大的值是\(j\),目前的和\(\mod 2^j\)在二进制下有\(k\)个1,\(S\)表示目前的和除以\(2^j\)(向下取整)
转移方程为\(f_{x,j+1,k+((s+x-i)\&1),(s+x-i)>>1}+=f_{i,j,k,s}\times v_{j+1}^{x-i}\times C_x^{x-i}\)
之后发现第二个样例没有过,然后就开始调,中途还怀疑自己的转移方程过,也去外面冷静过,1h后发现\(+=\)写成\(=\)了,改了就过了所有样例,写好对拍程序就只剩1h了。
之后决定开T3,没看出来是差分数组交换两个位置,推了一会柿子之后决定还是写暴力,写了个dfs发现第二个样例就TLE,之后写了一个模拟退火,第三个样例没过,最后20min感觉写不了T4,就都用来调参了。
预计分数:\(100+100+[12,48]+0=[212,248]\)
洛谷测的\(100+100+28=228\),T3算给面子了
真实成绩:\(100+100+44=244\),T3数据真水。
总结
这次做的其实还算好,心态比CSP的时候好很多,但是还是在时间把握上有问题。
在做T1的时候就被递归栈给浪费了1h,但是如果我改成用递推的方式预处理答案的话我也许就没有这个问题,这说明,我应该在写代码前想想有没有更好的实现方法,调试时可以用另一个写法来对拍小数据。
在做T2的时候被\(+=\)这种小细节用了1h来调,这说明调代码时可以先看代码细节,找到手误打错的地方。
我这次前两题都用了大量时间来调试,其实可以选择先写后面的题,尤其是在确定后面有些分特别好拿时(如这次T4的爆搜)。