#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
int a[*maxn];
int b[*maxn];
int c[*maxn];
int main()
{
int T; scanf("%d",&T);
while(T--)
{
int n,m;
long long num=;
scanf("%d %d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++) scanf("%d",&b[i]),c[i]=a[i]-b[i],num+=c[i];
if(m+num<)
{
printf("-1\n");
}
else
{
long long num=m;
int p1=;
for(int i=;i<=n;i++)
{
num+=c[i];
if(num<)
{ while(num<)
{
num-=c[p1];p1++;
} }
}
printf("%d\n",p1);
} }
}
D.cpp
H 的错误代码
#include<bits/stdc++.h>
using namespace std;
double x[];
double c[];
double d[];
pair<double,int> pa[];
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=;i<=k;i++) cin>>x[i];
while(n--)
{
double tot=;
for(int i=;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+,pa++k);
// for(int i=1;i<=k;i++) cout<<pa[i].first<<endl;
int num=k;
int t=;
while(tot>)
{
//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+,pa++k,up);
//for(int i=1;i<=k;i++) cout<<pa[i].first<<"==="<<endl;
for(int i=;i<=k;i++)
{
//cout<<abs(abs(d[i])-pa[i].first)<<endl;
if(d[i]<) c[i]+=abs(abs(d[i])-pa[i].first);
else c[i]-=abs(abs(d[i])-pa[i].first);
if(i!=) cout<<" ";
cout<<c[i];
}
cout<<endl; }
}
}