太蒟蒻了,虽然会双指针但是这题我还是不会写。
本题思路是,先把所有距离相加,然后除以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;
}总结: 这题知道是双指针的做法,但是有些题目意思没有搞懂,还是需要数据进行卡才能发现自己的错误。

京公网安备 11010502036488号