Algorithm3 交叉
[TOC]
交叉
交换纸牌:使之数量相等
题目链接:https://www.luogu.com.cn/problem/P1031
1、题目大意是允许相邻的两个牌堆交叉换牌
2、解决方案就是把交叉换成单向,然后通过单边尽头单向遍历简化问题【单边尽头单向可以的原因就是每次至少保证满足1个,然后就算是其他的中间往两边的,也最多了,每次只能满足一个,所以不如直接 单边 尽头 => 方便遍历】
#include <iostream>
using namespace std;
#define maxn 105
int n, a[maxn], sum = 0, ans = 0;
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {scanf("%d", &a[i]);sum += a[i];}
sum /= n;
for (int i = 0; i < n - 1; ++i)
if (a[i] != sum) {
a[i + 1] -= (sum - a[i]);
ans++;
}
printf("%d\n", ans);
return 0;
}