#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pl;
typedef pair<int,int> pii;
typedef tuple<int,int,int> tpl;
#define all(a) a.begin(), a.end()
#define filter(a) a.erase(unique(all(a)), a.end())
struct increase {
ll amount; vector<int> vec;
increase (ll a, vector<int> cur) : amount(a), vec(cur) {}
void push (int cur) { vec.push_back(cur); }
};
vector<increase> res;
const int mn = 1e6 + 6;
int cur[mn], a[mn], n, k;
void print() {
vector<ll> b(n + 1);
cout << res.size() << "\n";
for (increase &item : res) {
cout << item.amount << " ";
for (int u : item.vec) cout << u << " ";
cout << "\n";
for (int u : item.vec) b[u] += item.amount;
}
for (int i = 1; i <= n; i++) {
if (a[i] != b[i]) return cerr << "WA\n", void();
}
}
void operation (vector<int> poses, ll mult) {
// increase all of this positions by k / gcd(k, poses.size()) * mult
for (int u : poses) cur[u] = 0;
for (int it = poses.size() / __gcd(k, (int)poses.size()); it; it--) {
sort(all(poses), [&] (int a, int b) { return cur[a] < cur[b]; });
vector<int> tmp(poses.begin(), poses.begin() + k);
for (int u : tmp) cur[u] += mult;
res.emplace_back(mult, tmp);
}
}
namespace allSame {
int only;
void solve() {
int base = k / __gcd(k, n);
if (only % base) return cout << -1, void();
vector<int> vec(n);
iota(all(vec), 1);
operation(vec, only / base);
return print(), void();
}
bool check() {
only = *min_element(a + 1, a + 1 + n);
return (only == *max_element(a + 1, a + 1 + n));
}
};
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
if (allSame::check()) return allSame::solve(), 0;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |