AtCoder Grand Contest 007
AGC的题目真的很不错。拿来锻炼一下自己的思维水平。
A Shik and Stone
记录一下每一行最右边走到了哪里
下一行的最左边必须与上一行的最右边相连,且除了这一段连续的之外,不能再有别的路径
B Construct Sequences
构造,使\(a_i=n\times i-n+1\),而把\(a_i\)反向填在\(b_i\)中,这样,初始的时候\(a_i+b_i\)均相等
对于不同的排名,只需要对\(b_i\)加上\(rank_i-1\)就可以使得,他比他排名小的大
C Pushing Balls
D Shik and Game
这道题目和中秋一起训练的一套日本区预赛题的Black And White有些相像
显然,拿取coin一定是一段一段进行的
在一整段中,你会一次性走到最后,是他们开始产生coin,然后走回去,从这一段第一个开始拿
我们用\(f[i]\)表示拿到第\(i\)个位置所需要的最少时间,则\(f[i]=f[j]+a[i]-a[j]+max{T,(a[i]-a[j+1]\times 2)}\)
\(max\)的地方比较难处理,我们把他单独拿出来,用一个单调递增的队列维护,使得队首元素\(a[i]-a[j+1]\leq T\)
那么队列中的元素计算方式为\(f[j]+a[i]-a[j]+T\),而队列外的元素计算方式是\(f[j]+3\times a[i]-a[j]-2\times a[j+1]\)
维护的时间复杂度\(O(n)\)