太蒟蒻了,虽然会双指针但是这题我还是不会写。
本题思路是,先把所有距离相加,然后除以2,就能得出他的一半周长,然后用双指针维护,如果没有超过一半周长就往后走,否则后面的那个往前走,最后判断所有距离小的最大值。。但是这数据也太弱了,不管怎么写都会对。。。
# include <iostream> using namespace std; const int N=100010; int s[N]; int n; int sum=0; int num=0; int main(){ cin>>n; for(int i=0;i<n;i++) { cin>>s[i]; sum+=s[i]; } int cnt=0; int x=sum/2; int j=0; int res=0; for(int i=0;i<n;i++){ while(cnt<x){ cnt+=s[(j++)%n]; } res=max(res,min(cnt,sum-cnt)); cnt-=s[i]; } cout<<res<<endl; return 0; }
总结: 这题知道是双指针的做法,但是有些题目意思没有搞懂,还是需要数据进行卡才能发现自己的错误。