丢手绢
丢手绢
https://ac.nowcoder.com/acm/problem/207040
解题思路
尺取法(双指针)
先计算距离和,即圆圈周长。之后定义两个指针i,j,用res表示最长距离,当i和j之间的距离大于等于周长的一半时,更新res的值。
AC代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e5+10;
int a[N];
int sum;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
int x=sum/2;
int res=0;
int cnt=0;
int j=0;
for(int i=0;i<n;i++)
{
while(cnt<x)
{
cnt+=a[(j++)%n];
}
res=max(res,min(cnt,sum-cnt));
cnt-=a[i];
}
cout<<res<<endl;
return 0;
}



