比赛时间安排
7.30-7.45 做基础准备+看题 t1 spj!但是要输出最优解,没法骗分,暴力能做 t2 暴力可以搞一下,感觉m=1的也可写的样子 t3 概率?!表示题目意思没太读懂,万一后面的追上前面的怎么办,不会不会
7.45-7.55 t2暴力简单,先写了
7.55-8.10 t1 搞了一个dfs预处理+找答案
8.10-10.30 中间感觉特别困,睡了一会,然后想t2的m=1,发现就是找a[1]~a[n]&i有奇数个1的数字个数,本来想预处理,但是失败了,这么看怎么像一个多项式的算法,所以放弃了 然后看t1的第二档分,毫无头绪,想打表找个规律,未果
10.30-11.15 说改题面了,这样我的疑惑就解决了,可以写t3暴力了,想到之前有一个弹球的,我标记的并不是每个人,而是这个时刻的每个位置上的状态,进行dfs,枚举每个状态,如果有碰撞的话还要再枚举,感觉复杂度巨大,但是算了一下,肯定跑不满,能过15分吧(也许),然后就开始写,感觉写了好久,并不清楚数组在每次递归时候的状态,于是就每次开一个新的数组,然后查bug查了半天,发现是把n+1,写成n了,好在调出来了。样例对了,但是不知道结果对不对,自己也不知道还能怎么造数据了,随便试了几组,发现跑的飞快,n=20的也能过,惊了,妄想拿30,很大概率爆0吧(哭)
赛后总结反思
- t1打表打错了,打成答案个数了,应该直接求最优,说不定就能发现<=2的性质
- t3dfs有思想性问题,少考虑了一种情况,但是这道题dfs写起来应该极其复杂,不好维护,订一下dp就行
与正解的差距
T1
正解需要找到一个性质,关于二进制下3的倍数的,这次记住了,下次有类似的说不定能自己推出来嘿嘿
T2
首先自我批判,对fwt太不熟悉了,题目那么明显都没想起来,m=1就是一个裸的,已经了解 而m>1的情况就是在此基础上拓展,并进行容斥,写完之后发现只有80,找到对于每个m都设置一个f数组太费时间,可以把他们合并成为一个,fwt的结果并不受影响,所以作一个合并就是满分了
T3
n^4的dp还是比较容易理解的,考场上其实可以试着写一写。 这个n^3的优化就非常妙,在更新状态的时候,不枚举前面的每一个状态,而是在更新这一层的同时,更新下一层将要用到的状态,减掉一维循环,太强了 最后的正解基本想法是把这个区间分成两部分分别计算贡献,和之前有一个非常像,所以各种dp的模型还是要记住一些的,然后大体就是钦定左边的R全死了,右边的L全死了,然后从终点向起点转移,转移方式可以学习,这个状态设置嘛,有待研究
|