#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; int a[2*maxn]; int b[2*maxn]; int c[2*maxn]; int main() { int T; scanf("%d",&T); while(T--) { int n,m; long long num=0; scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]),c[i]=a[i]-b[i],num+=c[i]; if(m+num<0) { printf("-1\n"); } else { long long num=m; int p1=1; for(int i=1;i<=n;i++) { num+=c[i]; if(num<0) { while(num<0) { num-=c[p1];p1++; } } } printf("%d\n",p1); } } }
H 的错误代码
#include<bits/stdc++.h> using namespace std; double x[105]; double c[105]; double d[105]; pair<double,int> pa[105]; bool up(pair<double,int> px,pair<double,int> py) { return px.second<py.second; } int main() { int T; cin>>T; while(T--) { int n,k; cin>>n>>k; double r; cin>>r; for(int i=1;i<=k;i++) cin>>x[i]; while(n--) { double tot=0; for(int i=1;i<=k;i++) { cin>>c[i]; d[i]=c[i]-x[i]; pa[i].first=abs(d[i]); pa[i].second=i; tot+=abs(c[i]-x[i]); } tot=tot-r;// cout<<tot<<endl; sort(pa+1,pa+1+k); // for(int i=1;i<=k;i++) cout<<pa[i].first<<endl; int num=k; int t=1; while(tot>0) { //cout<<tot/num<<endl; if(tot/num<=pa[t].first) { for(int i=t;i<=k;i++) { pa[i].first=pa[i].first-tot/num; } break; } else { double nnn=pa[t].first; tot=tot-num*nnn; for(int i=t;i<=k;i++) { pa[i].first=pa[i].first-nnn; } t++; num--; } } //for(int i=1;i<=k;i++) cout<<pa[i].first<<"==="<<endl; sort(pa+1,pa+1+k,up); //for(int i=1;i<=k;i++) cout<<pa[i].first<<"==="<<endl; for(int i=1;i<=k;i++) { //cout<<abs(abs(d[i])-pa[i].first)<<endl; if(d[i]<0) c[i]+=abs(abs(d[i])-pa[i].first); else c[i]-=abs(abs(d[i])-pa[i].first); if(i!=1) cout<<" "; cout<<c[i]; } cout<<endl; } } }