这是我的vp,不是正真的contest.
A: 不想多说,读者应该可以做到的!!!
B: 让g=product(移除掉0的a):
如果有多过1个0答案肯定是0。
如果只是有1个0答案就是g。
没有0,答案就是max(g/a[i]*(a[i]+1)) 任何 i。
C: 没有仔细想那个profit的formula. 手打表,sum就可以了。
D:就是双指针, 如果两个指针的插值大过k:
那把左指针移去右指针那里然后答案加1
E: 小小二分,竟敢班门弄斧!!!!
看一个值y可以不可以就是每个h[i]<y, s+=(y-h[i])
然后看s<=x
F: 又是双指针!!!
就是当我们两个指针的位置一样时要特判。然后。。。就没有了
G: 啊这题蛮好的。 注意到 AAABAA 换时:
AAABAA->AABCAA,这里就右边就是废了然后左边可以做连锁反应
所以我们的决策点就是在每个B要左还是右?然后能加的值就是多少个连续的1
那么就是dp[i][左/右], 具体的转移方式就是:
l[i]为左边有多少个连续的1,r[i]则是右边。
dp[i][0]=max(dp[i-1][1],dp[i-1][0]+l[i]) 如果上一个拿了右边,现在就拿不到了
dp[i][1]=max(dp[i-1][1],dp[i-1][0])+r[i] 上一个不管什么方向,我现在往右上一个B管不到我了
答案就是max(dp[m][0],dp[m][1]) m=在字串里有多少个B
H:又到了我最喜欢的图论题
n个边代表说这是一个有cycle的图。 B能赢的方式就是去到cycle里。
那么我们就需要看如果A在B去到cycle的路途中那么答案就是NO
那么现在A要堵住B不让他去到cycle里,那么唯一的方式就是A去到cycle(让A进入cycle的节点称为topA)里,然后从那里最小路径去到B到达cycle的节点(topB)
如果A->topA+topA->topB的时间<=B去到topB的时间:答案就是NO
要不然就是YES
我的代码里用了一点https://codeforces.com/contest/1872/problem/F的删除叶子的技巧, 有想看看的可以去看看xd
做完啦!!!挺educational的题单(?)
标签:898,max,Codeforces,就是,答案,Div,cycle,dp,指针 From: https://www.cnblogs.com/yonglicp/p/17730985.html