题解 CF1416B 【Make Them Equal】
注意到
取平均值,若不为整数,则输出-1.
因为
有一种方案为(以下
1.将
2.将
对于每个i重复操作1,2(这两个操作可以使
3.将
这样操作次数为
考虑正确性:
对于1操作,因为
又因为
其余操作的显然不会使序列中出现负数.
#include <bits/stdc++.h>
using namespace std;
int a[100011];
int n, sum;
void solve() {
scanf("%d", &n); sum = 0;
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
sum += a[i];
}
if(sum % n) {
printf("-1\n");
return;
}
sum /= n;
cout << 3 * (n-1) << endl;
for(int i = 2; i <= n; i++) {
int x = a[i] % i;
cout << 1 << " " << i << " " << (i - x) % i << endl;
a[1] -= (i - x) % i; a[i] += (i - x) % i;
cout << i << " " << 1 << " " << a[i] / i << endl;
a[1] += a[i]; a[i] = 0;
}
for(int i = 2; i <= n; i++) {
cout << 1 << " " << i << " " << sum << endl;
a[1] -= sum; a[i] += sum;
}
}
int main() {
int T;
scanf("%d", &T);
while(T--) solve();
return 0;
}