丢手绢
丢手绢
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; }