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;
}

posted @ 2017-09-12 13:32  LMissher  阅读(94)  评论(0)    收藏  举报