CF675C Money Transfers

题目描述

Vasya 所在的城市有 $n$ 家银行,这些银行呈环形分布,任意两家编号相差不超过 $1$ 的银行都是邻居。另外,当 $n>1$ 时,第 $1$ 家与第 $n$ 家银行也是邻居。没有银行会是自己的邻居。 Vasya 在每家银行都有一个账户,账户余额可能为负数,这意味着 Vasya 欠银行的钱。 Vasya 只能进行一种操作:可以将任意数额的钱从某家银行转账到其相邻的一家银行。此次操作对金额大小和双方余额无限制。 Vasya 不喜欢处理大数,请你帮他计算将所有银行账户的余额都变为零所需的最少操作次数。已知 Vasya 总共的所有银行余额和为零,因此一定有解。

输入格式

第一行输入一个整数 $n$($1 \leq n \leq 100000$),表示银行的数量。 第二行输入 $n$ 个整数 $a_{i}$($-10^{9} \leq a_{i} \leq 10^{9}$),表示第 $i$ 家银行账户的初始余额。保证 $\sum a_i = 0$。

输出格式

输出一个整数,表示使所有银行账户余额变为零所需的最少操作次数。

说明/提示

在第一个样例中,Vasya 可以从第一个银行向第三个银行转账 $5$ 。 在第二个样例中,Vasya 可以先从第三个银行向第二个银行转账 $1$,再从第二个银行向第一个银行转账 $1$。 在第三个样例中,以下操作序列是最优方案: 1. 从第一个银行向第二个银行转账 $1$; 2. 从第二个银行向第三个银行转账 $3$; 3. 从第三个银行向第四个银行转账 $6$。 由 ChatGPT 5 翻译