一二三四五 上山打老虎

NC207040-丢手绢

题目链接:https://ac.nowcoder.com/acm/problem/207040

题意:n个小朋友围成一圈,给出小朋友的间距a1 ···an ,定义两个小朋友之间的距离为顺时针距离或逆时针距离中较短的距离,求离得最远的两个小朋友之间的距离。

思路:双指针

#include<iostream>

using namespace std;
long long  a[(int)1e5+5]={0};
long long  all=0;
long long  num(int r,int l){//计算r和l之间的距离
    return min(a[r]-a[l-1],all-(a[r]-a[l-1]));
}
int main (){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        a[i]+=a[i-1];
    }
    all=a[n];
    int r=1;
    long long  ans=0;
    for(int i=1;i<=(n+1)/2;i++){ //题目数目太水,只要遍历到一半就可以过 也可以遍历到n
        while(num(r+1,i)>num(r,i))r++;
        ans=max(ans,num(r, i));
    }
    cout<<ans<<endl;
    return 0;
}
posted @ 2021-01-23 12:21  黒川川  阅读(74)  评论(0)    收藏  举报