#2959. 还钱
还钱
题目背景
小明住在 S 城,这座城市是一个大圆圈。
题目描述
S 城有 家银行,分布在大圆圈上,第 家银行和第 家相邻,特别的,第 家银行和第 家相邻。他在第 家银行存有 元( 是整数)。特别的, 有可能是负数,表示他向这家银行借了钱。
S 城即将遭到 M 国的攻打,所以小明想要尽快和这些银行两清,把他在每家银行中的存款都变成 ,然后逃跑。
为了达成这个目标,他将会进行若干次转钱操作。
因为身上带太多现金不安全,所以每一次他会选择相邻的两家银行,从一家银行转(或者借)一些钱进另一家。即任意钦定一个整数 (可正可负),把相邻的 和 (或者 和 )一个加上 ,另一个减去 。
银行转钱的手续十分复杂,为了尽快逃跑,小明希望操作次数尽可能少,所以请你帮他计算出最少的次数。
输入格式
从文件 retmoy.in
中读入数据。
第一行,一个正整数 ,表示数据组数。
接下来 组数据,每组数据格式如下:
- 第一行,一个正整数 ,表示有多少家银行。
- 第二行, 个整数 ,表示小明在每家银行中的存款。
输出格式
输出到文件 retmoy.out
中。
共 行,每行一个非负整数,表示最小的操作次数。
如果无论如何都无法达成目标,请输出 laycentral
。
样例 1
输入
2
2
-1 1
4
1 -2 3 1
输出
1
laycentral
解释
第一组数据,小明转一次钱即可:
- 从第二家银行中转 元到第一家银行中;
第二组数据,不难发现小明无论如何也达不成目标。
样例 2
该样例符合测试点 的限制。
输入
见下发文件中的 retmoy2.in
输出
见下发文件中的 retmoy2.out
样例 3
该样例符合测试点 的限制。
输入
见下发文件中的 retmoy3.in
输出
见下发文件中的 retmoy3.out
样例 4
该样例符合测试点 的限制。
输入
见下发文件中的 retmoy4.in
输出
见下发文件中的 retmoy4.out
样例 5
该样例符合测试点 的限制。
输入
见下发文件中的 retmoy5.in
输出
见下发文件中的 retmoy5.out
数据范围与提示
本题每个数据点等分。
定义 , 为所有 组数据中 的总和。
测试点编号: , , ,
测试点编号: , , ,
测试点编号: , , ,
测试点编号: , , ,
测试点编号: , , ,
如果你不会多组数据的读入,可以参考以下代码:
#include <iostream>
#include <cstdio>
using namespace std;
int n,a[1000005];
void run()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
// 在这里处理每一组数据
}
int main()
{
int T;
scanf("%d",&T);
while(T-->0) run();
}