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 翻译