啊啊啊,感觉又双惨了。。。
估分:(100 + 0 + 50 = 150)
考场:(100 + 0 + 0 = 100)
(T1)
看上去很像矩乘,所以推了推,没推出来。
然后发现它分档分的很有意思。
35分暴力可以搞定。
然后还有一档(m)特地小了很多???
哇,好像可以找循环节诶!!!70分到手。
最后一档才叫古怪,稀里糊涂地搞了好多限制。
然后开始推。。。(b%2a==0)。。。什么鬼。。。
另一条(4*a*c=b^2-2*b)才叫奇怪。。。咦等等,好像很像二次函数中的顶点式里的东西啊。
然后推推推,发现了:(x[n]=a*(x[n-1]+b/2a)^2-b/2a)
卡住了。。。然后又突然发现:(x[n]+b/2a=a*(x[n-1]+b/2a)^2),这样可以将(x)都看作(x+b/2a)!!!
然后得到改后的:(k=n-1),(x[n]=a^k*x0^n),然后搞定了!
(T2)
数据范围很小,感觉可以用搜索来弄,但是不知道怎样正确判断,怎样正确搜索。
然后就先跳过(弃)了。
其实(T2)有个思路以前做过。
就是判断一个点时候在一个多边形内。
只需要它任意向一个方向射线,判断一下交点个数的奇偶性即可。
这题也是这样子的。我们可以设(dis[i][j][s])表示到达了((i,j)),且特殊点向上射线交点奇偶性的状态为(s)时的最小步数。
然后用广搜更新状态即可。
(T3)
这一道题考试的时候看错题意了,以为那个传送石只能够用一次。。。
然后对拍的时候怎样都不对。。。然后就(0)了。。。
如果可以用多次的话,那么这题应该是可以用(DP)来做的。
正解是二分+(DP)。
**求最值啊!!!那应该要想到二分的啊!!!
二分答案,然后判断是否合法。而我们可以将每个点的值转换成一个值(val[i]=a[i]-mid*b[i])。
然后设(f[i])表示到(i)这个点时的上述值的最大值。
转移方程显然:(f[i]=f[j]+val[k]),(k)表示([j+1,i])这段区域中(c)最大且靠后的那个点。
这样做可以是(O(n^2logn))的,但会(TLE),所以我们要想办法优化一下。
我们可以用线段树来储存(f)这个数,然后对于(k)的话做单调队列,我们可以得到当前到(i)为止,每个(j)对应的(k)是什么。
这样我们可以对此弄到一个线段树里面去,然后取前面中的(max)即可。
总结
这一次,感觉前面的时间都利用的很好。嗯嗯表扬一下先~
但是,到了后面就开始不行了。。。
打码的时候出现的很多个明显错误。。。线段树都打错了一个地方。。。
时间的利用很算可以,就是最好都三题打完,这是优秀的。
强调一下,观察数据范围真的很重要!!!
还有不要因为麻烦而导致时间被拖延,然后没时间。。。