This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl
using ll = long long;
const int maxn = 1e6 + 5;
int n, k;
int a[maxn];
int b[maxn]; //sum(ith column) mod k
vector<pair<int,int>> ans;
void print() {
for (int i=0; i<n; i++) {
cout<<a[i];
}
cout<<endl;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n>>k;
for (int i=0; i<n; i++) {
cin>>a[i];
}
for (int i=0; i<n; i++) {
b[i%k] += a[i];
b[i%k] %= k;
}
for (int i=0; i<n%k; i++) {
if (b[i] != b[0]) {
out(-1);
}
}
for (int i=n%k; i<k; i++) {
if (b[i] != b[n%k]) {
out(-1);
}
}
// make a[i-1] <= a[i]
for (int i=1; i<n; i++) {
while (a[i-1]>a[i]) {
ans.push_back({1, i});
a[i] += k;
}
}
for (int i=k-1; i<n-1; i++) {
int dy = a[i+1]-a[i];
int left = n;
for (int y=0; y<dy; y++) {
for (int j=i-k+1; j>=0; j-=k) {
left = min(left, j);
ans.push_back({2, j});
}
}
for (int j=i; j>=left; j--) {
a[j] += dy;
}
}
for (int i=0; i<k-1; i++) {
while (a[i]<a[n-1]) {
ans.push_back({1, i});
a[i] += k;
}
//assert(a[i]==a[0]);
}
//print();
int dy = a[0]-a[n-1];
for (int y=0; y<dy; y++) {
for (int i=n-1; i-k+1>=0; i-=k) {
if (a[n-1]==a[i-k+1]) {
ans.push_back({2, i-k+1});
//watch(i-k+1);
} else {
break;
}
}
}
//watch(dy);
cout<<ans.size()<<"\n";
for (auto p: ans) {
cout<<p.first<<" "<<1+p.second<<"\n";
}
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... |