H 「土」巨石滚滚
题意:土球有一个稳定值m,当m<=0立即解体。每个障碍有破坏a,恢复b两个属性,当撞向一个障碍时要求a>m,稳定性损失m=m-a,撞完后然后稳定性恢复m=m+b。给出m和所有障碍的a,b,判断是否有一个可以经历所有障碍不解体的障碍出现次序。
解法:贪心。首先先去撞b-a>0的障碍,因为撞这些m会增加,m到最大后再去撞b-a<0的障碍。b-a>0:按a从小到大,这样可以保证过尽可能多的障碍。a-b:这个需要一点证明,结论是:按b从大到小。简单证明:如果答案为“yes”,最后的m一定是确定的,那么考虑逆过程,就是把恢复的稳定值吐出来再加上损失的稳定值(像不像正向的过程?),逆向就要保证m>0,且-b+a>0(和前面正向b-a>0的过程一致),所以就是按照b降序,正向就是b升序啦。
#include<bits/stdc++.h>
using namespace std;
struct ac{
long long a,b,get;
}arr[500010];
bool cmp(ac a1,ac a2){
if(a1.get>0&&a2