rt,第一次的check函数我是这样写的:
bool check(int x){
int cnt=0;
for(int i=1,j=1;i<=n && j<=m;i++,j++){
while(a[i]-b[j]>x) j++;
while(b[j]-a[i]>x) i++;
cnt++;
}
return cnt>=tot;
}
然后便只有80分。
我后面重构了一下代码,换了一种check的写法:
bool check(int x){
int cnt=0,i=1,j=1;
while(i<=n && j<=m){
if(abs(a[i]-b[j])<=x) i++,j++,cnt++;
else if(a[i]>b[j]) j++;
else i++;
}
return cnt>=tot;
}
然后就A了。我觉得两次的check是等价的,不知道第一次的check有什么问题,求大佬指出。