Submission #312315

#TimeUsernameProblemLanguageResultExecution timeMemory
312315limabeansJOIRIS (JOI16_joiris)C++17
100 / 100
1 ms640 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; 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...