如题,考虑了一根覆盖全部的情况了,还是 WA on #2。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,i,a,x,y,l,r,tl1,tr1,tl2,tr2,fl1,fr1,fl2,fr2,gx1,gx2;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a>>x;y=a-x;
if(x>y)swap(x,y);
tl1=-x;tr1=y;tl2=-y;tr2=x;
gx1=gx2=fl1=fr1=fl2=fr2=0;
if(tl1<l)gx1+=l-tl1,fl1=1;
if(tr1>r)gx1+=tr1-r,fr1=1;
if(tl2<l)gx2+=l-tl2,fl2=1;
if(tr2>r)gx2+=tr2-r,fr2=1;
if(gx1>0&&gx1>gx2){
if(fl1)l=tl1;
if(fr1)r=tr1;
continue;
}
if(gx2>0&&gx2>gx1){
if(fl2)l=tl2;
if(fr2)r=tr2;
continue;
}
if(gx1>0&&gx1==gx2)l=tl1,r=tr1;
}
cout<<max(0ll,r-l);
}