加个特判如果最后那个序列和最后大于等于0,从头开始再来一次,记录头加过的状态,从新的地方加
#include <bits/stdc++.h>
using namespace std;
int a[1000009],b[1000009];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
for(int i=1; i<=n; i++)
scanf("%d",&b[i]);
int ans=0;
int st,max1,now,pai,fir,st1,now1;
st1=now1=fir=0;
max1=0,now=0,pai=0;
st=1;
int i=1;
for(i=1; i<=n; i++)
{
now+=(a[i]-b[i]);
pai+=a[i];
if(now<0)
{
now-=(a[i]-b[i]);
pai-=a[i];
max1=pai;
now1=now;
fir=pai;
st1=i;
break;
}
}
if(i>=n)printf("0\n");
else
{
now=0;
st=i;
for(; i<=n; i++)
{
now+=(a[i]-b[i]);
pai+=a[i];
if(i==n&&now>=0){break;}
if(now<0)
{
pai-=a[i];
if(max1<pai)
{
max1=pai;
ans=st-1;
}
now=0;
pai=0;
st=i+1;
}
}
if(i==n)
{
pai+=fir;
now+=now1;
int j=st1;
for(;j<=n;j++)
{
now+=(a[j]-b[j]);
pai+=a[j];
if(now<0)
{
pai-=a[j];
if(pai>max1)
{
ans=st-1;
}
break;
}
}
if(j>=n)ans=st-1;
}
printf("%d\n",ans);
}
}
return 0;
}