样例2都没过结果AC了就离谱。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,cnt=1,m,ans;
bool fl;
struct node{
int dis,p;
};
node f[N],maxn;
bool cmp_x(node x,node y){
return (x.dis==y.dis)?(x.p>y.p):(x.dis>y.dis);
}
bool cmp_y(node x,node y){
return x.p>y.p;
}
int maxx(int x,int y){
return (x>y)?x:y;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&f[i].dis);
for(int i=1;i<=n;++i) scanf("%d",&f[i].p);
stable_sort(f+1,f+n+1,cmp_x);
maxn=f[1]; f[1].dis=0; f[1].p=0;
stable_sort(f+1,f+n+1,cmp_y);
for(int x=1;x<=n;++x){
if(!fl){
int a=((maxn.dis-m)<<1)+maxn.p;
int b=maxx(0,(f[cnt].dis-m)*2)+f[cnt].p;
if(a>b){
fl=1;
ans+=maxn.p;
m=maxn.dis;
}
else{
ans+=f[cnt].p;
m=maxx(m,f[cnt].dis);
++cnt;
}
}
else{
ans+=f[cnt].p;
++cnt;
}
printf("%d\n",ans+(m<<1));
}
return 0;
}