内容概述:
有n个小朋友围成一圈,给出相邻小朋友的距离,问两个小朋友的最大距离
输入描述:第一行为你,接下来n行为第i个小朋友与第i+1个小朋友的距离,第n个小朋友和第1位小朋友的距离
题解:
运用尺取法,
tips:
- 用 end%n解决环的问题
- 单次以len<sum/2结束,得到的长度为半圆或者一个优弧,用min(len,sum-len)取得劣弧
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int start=0,end=-1,i;
int maxs=0,sum=0,t=0,x;
int n;
int dis[100000];
cin>>n;
for(i=0;i<n;i++)
{
cin>>dis[i];
sum += dis[i];
}
x=sum/2;
for(start=0;start<n;start++)
{
while(t<x)
{
end++;
t=t+dis[end%n];
}
maxs=max(min(t,sum-t),maxs);
t -= dis[start];
}
cout<<maxs;
return 0;
}