hdu 6205(2017 ICPC shenyang 1012)
题目:有两组数目相同的数,数目可以顺序移动。每组数从1到n进行ai-bi并求和,当和小于0时停止,并把之前的ai求和输出,求最大的ai求和。
题解:把两组数复制并延长一倍。一个循环搞定。
ps:第一道自己做出的网络赛题目,继续努力!
代码:
#include<cstdio>
int a[1100000],b[1100000];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int tot=0,ans=0,cnt=0,max=0,huida=0,huida1=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
tot+=a[i];
}
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
for(int i=1;i<=2*n;i++){
int j;
if(i>n) j=i-n;
else j=i;
ans+=a[j];
cnt+=(a[j]-b[j]);
//printf("%d %d\n",ans,cnt);
if(ans==tot){
huida1=huida;
break;
}
if(cnt<0){
if(ans>max){
max=ans;
huida1=huida;
}
while(cnt<0){
huida++;
ans-=a[huida];
cnt-=(a[huida]-b[huida]);
}
//printf("%d %d\n",huida,huida1);
}
}
printf("%d\n",huida1);
}
return 0;
}

浙公网安备 33010602011771号