时间
8:00~9:10 T1写了dfs的暴力,按照题意模拟一遍,不会任何的优化,想着用链状结构来维护一个点左右的第一个0,但是写不出来,所以就弃了。看到了mod=1e9+7,应该是dp,但是又不知道从何写起。
9:10~10:10 T2开始找规律,构造题,之前考的都是会出现规律的,所以就开始找,实在是找不到,只好先往后写。
10:10~12:10 T3,写了暴力,发现复杂度高死了,就打了表,然后推k=1的递推式,i代表选到当前物品,j是选择了多少个物品,k是选择的总价值。
f
[
i
]
[
j
]
[
k
]
=
f
[
i
−
1
]
[
j
]
[
k
]
f[i][j][k]=f[i-1][j][k]
f[i][j][k]=f[i−1][j][k]
f
[
i
]
[
j
]
[
k
]
+
=
f
[
i
−
1
]
[
j
−
1
]
[
k
]
f[i][j][k]+=f[i-1][j-1][k]
f[i][j][k]+=f[i−1][j−1][k]
表示选到第i个时,不选择就直接又i-1转移,若选择就是下面的。
推出来后写,实现上一直有问题,时间逼近,一直压着自己耐心去调,最后一点点的,突然发现了,自己求的答案是询问的n+1,x+1的情况,然后直接改,再把两个代码和到一起,比赛结束就剩3min了,还有取模,狂补。
题目
T1 RE了,各种相乘,不停取模,就能拿到40分。这种写法的关键就是找到几个素数,1331 13331,1e6+7,相乘取模就能hash掉,当然还可以更直接的把数字变成字符串,然后放到map里,进行特判。
T2 暴力分很好打,写一个大法师,将每一个端点变为1,其余为0,01枚举,正解是构造,一个大模拟。
T3 答案是对了,只是没有在每次循环的时候把设的
f
、
a
n
s
f、ans
f、ans数组清0,不过幸好自己分段写,不然就惧了。没有清空数组,没有调零变量,这种错误已经不止一次在考场上扔分了。写另一份代码的时候想到了要清空,(明摆的要清空),但是当时想着图简单,先去掉了循环,就不在去写memset了,这种问题也都是自己的仔细问题,完全可以写一个注释去提醒自己。
T4 大家清一色的30,自己没写,这道题的送分确实挺多的啊。正解是线段树去维护,代码还是无法实现。
总结
明显这次又陷进去了,虽然考试结束前改出了代码,但是这种细节还是没抓到,甚至连试试样例都没有,直接提交了,(不过样例也没法拯救,前面小数据打的表会直接输出,后面的只有一组,样例当然直接过),写分段的时候,另外去写部分分代码的时候也要按全部去写,别到最后,代码合并时出现问题,考虑问题时想到了,当时为什么没立刻做出改变。
这场考试策略上的问题太大了,这问题的根本是读题时发生的,读题时没决定好正确的做题顺序,为了20分扔了30分,当然T1的25分也RE,T2的暴力也没去写,如果说正确的做题顺序就应该是T4→T1→T3→T2。顺序确实挺重要的。