围成一个圈,追人肯定会走较小的那半圈,
从中判断最小值。
#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; }