2018/3/9
今天的考试又有原题,然而我还是只剩下1h 很虚,觉得码不出来,只打了一个暴力的DP还把 s2 打成了 s1 只有 10 分。
T1 运动会
这个题的暴力很好打,然后就是贪心,每次去掉人数最多的项目是最优的,然后自己打得比较的蠢,找最大值可以直接O(n)扫一遍,我居然还傻傻的拍了一遍序,愚蠢!!! 在每一个人的选择中,删除一个项目,可以用链表,或者是直接记录一下上一次删除的位置,这样都是O(1)的,我居然还是暴力的扫了一遍,愚蠢!!!
T2 青蛙
这个题首先可以推个柿子出来
就是f'[a[i]]=f[a[i]+1]+f[a[i]-1]-fa[i]
然后照着这个柿子DP就可以有40分了
然后我想这个东西看起来其实挺像一个矩阵转移的形式,然后我就尝试着构造了一下这个矩阵,然后发现只有对角线附近是有数的其他位置其实都是0,那么我觉得1000*1000的矩阵开一个飞机也能飞过去,然后就是吧m个矩阵合成一个矩阵然后快速幂,但是如果直接乘起来的话,构造就是O(n^2*m)的,然后我们通过观察可以发现,其实在枚举1~m的时候,每次新生成的矩阵,只有三个相邻的点特殊,其他的地方对角线是1,剩下的位置是0,然后我们就是可以直接单独的转移这一列,这样下来就是O(n^2)的了,然后有一个貌似挺有用的减枝就是开始的时候,把和跳动无关的点都直接删掉,这样可以快不少,然后这样可以拿到70分
还有一种是找循环节,大概就是记录每一个点的状态,然后通过找大样例中的每一个点的状态,然后就是可以发现每一个点的转移其实是有寻环节的然后用vector+map也可以得到70分
正解是把上面的柿子移一下项
f'[a[i]]-f[a[i]-1]=f[a[i]+1]-fa[i]
f[a[i]+1]-f'[a[i]]=fa[i]-f[a[i]-1]
可以发现在跳动的frog中,他们之间的差分关系其实是一定的,这不过是在以循环节的方式在移动,那么我们就可以直接把这些环找到,然后就可以很快的知道他和他前面的“跳板”之间的查分关系,然后由没有跳动的青蛙,通过查分关系就可以知道现在的青蛙的位置复杂的是O(n)的
T3 回文串
忧伤的原题。。。。。。。。。。。。
总结一下的话就是,其实只要找对方向,就算是乱搞,也是很有可能拿到很高的部分分,但是如果决定要这么弄,而且发现这么弄有很好的效果时,就是要竭尽所能来优化,加上各种减枝。
还有就是。。。。。。。。。。。
码力好弱啊!!!!!!!!!