hdu 6205 card card card

来源:互联网 发布:vmware for mac下载 编辑:程序博客网 时间:2024/05/16 08:06

加个特判如果最后那个序列和最后大于等于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;}