围成一个圈,追人肯定会走较小的那半圈,
从中判断最小值。
#include<iostream>
using namespace std;
int a[100010] = {0};
int main(){
int n;
cin >> n;
int l = 0, sum = 0;//l在前,i在后
for(int i = 0; i < n; i++){
cin >> a[i];
sum += a[i];
}
int temp = 0;//两者间的距离
int ans = 0, jin;
for(int i = 0; i < n; i++){
while(temp < sum / 2){//l为前面的
temp += a[l % n];//l % n因为是一个圈,在l = n时 又从a[0]开始加起
l++;
}
jin = min(temp, sum - temp);//sum可能为奇数,一般会向下取整,判断较小的那半圈
ans = max(ans, jin);//最大值
temp -= a[i];
}
cout << ans << endl;
return 0;
}
京公网安备 11010502036488号