Submission #311963

#TimeUsernameProblemLanguageResultExecution timeMemory
311963limabeansJOIRIS (JOI16_joiris)C++17
30 / 100
1 ms512 KiB
#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; 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<k; i++) { if (b[i] != b[0]) { 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]); } int dy = a[0]-a[n-1]; for (int y=0; y<dy; y++) { for (int i=k-1; i<n; i+=k) { ans.push_back({2, i}); } } cout<<ans.size()<<"\n"; for (auto p: ans) { cout<<p.first<<" "<<1+p.second<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...