技巧:
双指针 + 环形队列
思路:
枚举每个小朋友的距离 (两人最远距离肯定是在总距离一半的附近位置)
实现:
package main
import (
"fmt"
"math"
)
func main() {
var n int
fmt.Scan(&n)
total := 0
arr := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scan(&arr[i])
total += arr[i]
}
ans := 0
i, j := 0, 1
sum := arr[0]
for i != n - 1 {
for (sum << 1) < total {
sum += arr[j]
j = (j + 1) % n
}
ans = int(math.Max(float64(total - sum), float64(ans)))
sum -= arr[i]
i = (i + 1) % n
}
fmt.Println(ans)
}

京公网安备 11010502036488号