如果有修改,一定要考虑全这个修改对之前的操作的影响!
T1
mxdt没到n,后来想到,但只改了二分里的,没改特判上的,然后就死了。。。
A. Blue
一开始想到了网络流,类似蜥蜴那道题,对每个石子拆点,跑最大流。然后看到数据范围发现不可做。
后来觉得先把部分分拿到。同时也在其中得到了思路上的启发。
对于m==1,直接算每两块的间隔,看是否存在一个间隔>d,引向性质二。
对于n==L-1,最优的跳法显然是把空间平均给每只蛤。任何一只蛤少跳一块,都会让另一只蛤多跳一块,从而使答案不优。引向性质一and性质二。
当你想直逼正解的时候,不要太着急,也许部分分的思考能点开你的思路!
- 对于每一轮跳跃之间,每个青蛙每轮跳跃后的相对位置不变。
- 最优解一定存在一种方案不会浪费任何一个石子。多经过石子不会让答案变差。
之后看到答案有单调性,于是开始想二分。
验证也很自然,O(n)扫mid只青蛙每次跳跃mid块(性质一)的所有路线(性质二)是否都合法,即a[i]-a[i-mid]>=d都成立。
此时实际上所有青蛙的路线是一起验证的。如果成立,任意一只青蛙都能找到自己的合法路线而不干扰其他。
这题做法挺多的:比如二分套贪心(上面O(nlogm)),单调指针维护青蛙群(wd lyl) O(n),平衡树贪心最大合法后继暴跳(skyh) O(mlogn)。
B. Weed