比赛时间安排
7.30-7.40
t1暴力貌似可以,但是忘了最长公共子序列怎么求!!自闭了
t2 题目表示看不懂什么意思
t3 也看不懂,A的下标是x?,A不是数组啊,自闭了
7.40-9.10
我现在也只会t1了,就去写了t1,前面都比较顺畅,但是dp是真的无能为力,于是自己想,然后试一试,发现怎么都过不了,心态非常崩,还没写完,就回班了
9.20-9.30
又来冷静一下,发现复杂度炸了,n=4的已经炸了,那我写个der啊,果断放弃
9.30-10.10
我自以为看懂了t2的题目,感觉a数组并没有什么用
然后想到可以n^2预处理过50的数据,而这个预处理,是我连着用了3次的区间dp!!!(真的很好用)
考虑枚举每一个x,y,找到它能产生贡献的最小区间,然后利用区间dp扩大,求出f[L][R],如果这一段区间内的方案都合法,那么这个区间就是最终答案的一个合法区间,然后再扩大,就能把最终的答案算出来了!
没怎么调bug,(开心)
10.20!!!!!!!!(左右)
正在我满心激动的去看t3的时候,突然老师进来说。。。。
t2题面是不是有问题啊,然后我仔细一看,确实不对劲,然后心里慌死了。最后改了题面,感觉差不多把题意都改了,a瞬间有了价值,我。。。。。自闭。。。。
苍天啊!!!!!!!!
然后自闭了好一会,都快不想打了,突然发现貌似之前的代码还是可以用的,改了一些些小细节,就过掉了,样例,然后赶紧拍了一下,没问题,真是万幸!
11.10-12.20
先把t3的暴力写了,发现就是排序一下用树状数组求个值就行,25有了
然后想A=0的情况,发现我可以变成找y[i]>-C/B或者y[i]<-C/B的情况,根据B的正负分类
然后排序,比如y[i]>-C/B那么我就能按照-C/B从大到小,这样保证答案单调,好统计,然后我决定上线段树!感觉怪怪的,硬着头皮写完了,发现好像和线段树的操作没什么大关系,然后随便造了一组数据,我发现!我的暴力错了?!想不到哪里错了,自闭。。
赛后总结反思
- 一些简单的dp模型不能忘,这种大家都会的忘了很吃亏
- t3的边界写错了,x相等的时候不能算贡献,但是我算了,粗心丢了25分,哭了
- 不要莽线段树!
与正解的差距
T1
是一道推性质的题,想到了之前的有一道回文串的题,也是通过类似的性质得出答案,但是感觉考场上还是不知道从哪个方面入手,自闭
T2
50分写出来,非常满意!
T3
50分的正解我确实差一点想到,原来用一个二分+前缀和就能解决,同样是分为B<0和>0两类,进行操作,只是不需要线段树,而是想象成一个线段,以B*y+C=0为分界,加左边或右边的贡献,这个思想还是值得学习的