CF1416B Make Them Equal

https://www.luogu.com.cn/problem/CF1416B

显然如果总和不是n的倍数,那么必然无解

考虑先把所有的数都移到1,然后再分配回去

如果当前这堆不能整除 i i i,那么可以先从1借一些过来(因为保证了 a i > = 1 a_i>=1 ai​>=1,所以按顺序做的话是一定可以借到的)
那么代码就很简单了
code:

#include<bits/stdc++.h>
#define N 200050
using namespace std;
int a[N], n, t;
void solve() {
    scanf("%d", &n);
    int s = 0;
    for(int i = 1; i <= n; i ++) scanf("%d", &a[i]), s += a[i];
    if(s % n) {
        printf("-1\n");
        return ;
    }
    printf("%d\n", 3 * (n - 1));
    for(int i = 2; i <= n; i ++) {
        int r = a[i] % i;
        printf("%d %d %d\n", 1, i, (i - r) % i);
        a[i] += (i - r) % i;
        printf("%d %d %d\n", i, 1, a[i] / i);
    }
    for(int i = 2; i <= n; i ++) printf("%d %d %d\n", 1, i, s / n);
}
int main() {
    scanf("%d", &t);
    while(t --) solve();
    return 0;
}
上一篇:CF1594C Make Them Equal


下一篇:java有关“==”与equal方法的使用与区别