Submission #328050

#TimeUsernameProblemLanguageResultExecution timeMemory
328050MonkeyKingJOIRIS (JOI16_joiris)C++14
30 / 100
4 ms620 KiB
//Original Code: //#include <self/utility> //#include <self/debug> //using namespace std; //int n,k; //int a[55]; //int s[55]; //int g[55][2505]; //vector <pii> res; // //inline void error() //{ // cout<<-1<<endl; // exit(0); //} // //inline void putV(int col) //{ // res.push_back(mp(1,col+1)); // // cout<<1<<' '<<col+1<<endl; //} // //inline void putH(int row) //{ // res.push_back(mp(2,row+1)); // // cout<<2<<' '<<row+1<<endl; //} // //int main() //{ // freopen("input.txt","r",stdin); // // freopen("1.out","w",stdout); // // freopen("input.txt","r",stdin); // scanf("%d%d",&n,&k); // for(int i=0;i<n;i++) // { // scanf("%d",a+i); // s[i%k]+=a[i]; // } // for(int i=0;i<k;i++) // { // s[i]%=k; // } // for(int i=0;i<n%k;i++) // { // if(s[i]!=s[0]) error(); // } // for(int i=n%k+1;i<k;i++) // { // if(s[i]!=s[n%k]) error(); // } // for(int i=1;i<n;i++) // { // while(a[i]<a[i-1]) // { // a[i]+=k; // putV(i); // } // } // for(int i=0;i<n;i++) // { // for(int j=0;j<a[i];j++) // { // g[i][j]=true; // } // } // memset(s,0,sizeof(s)); // for(int h=0;h<a[n-1];h++) // { // for(int i=n-1;i>=k-1;i--) // { // if(g[i][h]) continue; // putH(i-k+1); // for(int j=i-k+1;j<=i;j++) // { // s[j]++; // g[j][h]=true; // } // } // } // for(int i=0;i<k;i++) // { // for(int j=0;j<k;j++) // { // putV(i); // } // // cout<<a[i]<<' '<<s[i]<<' '<<k*k<<' '<<a[n-1]<<endl; // a[i]=a[i]+s[i]+k*k-a[n-1]; // } // for(int i=0;i<k;i++) // { // assert(a[i]<=k*k); // while(a[i]<k*k) // { // a[i]+=k; // putV(i); // } // } // for(int i=k;i<n;i++) // { // for(int j=0;j<k;j++) // { // putV(i); // } // } // for(int i=0;i<k;i++) // { // a[i]-=k*k; // } // if(n%k!=0) // { // int t=a[n%k-1]; // while(t--) // { // for(int i=n%k;i<n;i+=k) // { // putH(i); // } // } // } // cout<<res.size()<<endl; // for(auto &p:res) // { // cout<<p.first<<' '<<p.second<<endl; // } // return 0; //} //substituted with C++ Inliner #ifndef _SELF_UTILITY #define _SELF_UTILITY 1 #include <numeric> #include <iostream> #include <algorithm> #include <cmath> #include <stdio.h> #include <stdlib.h> #include <vector> #include <map> #include <queue> #include <set> #include <string> #include <string.h> #include <stack> #include <assert.h> #include <bitset> #include <time.h> #define Endl endl #define mp make_pair #define ll long long #define ull unsigned long long #define pii pair<int,int> #define over(A) {cout<<A<<endl;exit(0);} #define all(A) A.begin(),A.end() #define quickcin ios_base::sync_with_stdio(false); #ifdef __TAKE_MOD int mod; #else #ifdef __TAKE_CONST_MOD const int mod=__TAKE_CONST_MOD; #else const int mod=1000000007; #endif #endif const int gmod=5; const int inf=1039074182; const double eps=1e-9; const ll llinf=2LL*inf*inf; template <typename T1,typename T2> inline void chmin(T1 &x,T2 b) {if(b<x) x=b;} template <typename T1,typename T2> inline void chmax(T1 &x,T2 b) {if(b>x) x=b;} inline void chadd(int &x,int b) {x+=b-mod;x+=(x>>31 & mod);} template <typename T1,typename T2> inline void chadd(T1 &x,T2 b) {x+=b;if(x>=mod) x-=mod;} template <typename T1,typename T2> inline void chmul(T1 &x,T2 b) {x=1LL*x*b%mod;} template <typename T1,typename T2> inline void chmod(T1 &x,T2 b) {x%=b,x+=b;if(x>=b) x-=b;} template <typename T> inline T mabs(T x) {return (x<0?-x:x);} #endif using namespace std; #ifndef _SELF_DEBUG #define _SELF_DEBUG 1 #ifndef _SELF_OPERATOR #define _SELF_OPERATOR 1 using namespace std; template <typename T> ostream &operator<<(ostream &cout, vector<T> vec) { cout << "{"; for (int i = 0; i < (int)vec.size(); i++) { cout << vec[i]; if (i != (int)vec.size() - 1) cout << ','; } cout << "}"; return cout; } template <typename T> void operator*=(vector<T> &vec, int k) { for (auto &x : vec) x *= k; } template <typename T> void operator-=(vector<T> &a, const vector<T> &b) { assert(a.size() == b.size()); for (size_t it = 0; it < a.size(); it++) { a[it] -= b[it]; } } template <typename T> vector<T> operator*(const vector<T> &vec, int k) { vector<T> res(vec); res *= k; return res; } template <typename T1, typename T2> ostream &operator<<(ostream &cout, pair<T1, T2> p) { cout << "(" << p.first << ',' << p.second << ")"; return cout; } template <typename T, typename T2> ostream &operator<<(ostream &cout, set<T, T2> s) { vector<T> t; for (auto x : s) t.push_back(x); cout << t; return cout; } template <typename T, typename T2> ostream &operator<<(ostream &cout, multiset<T, T2> s) { vector<T> t; for (auto x : s) t.push_back(x); cout << t; return cout; } template <typename T> ostream &operator<<(ostream &cout, queue<T> q) { vector<T> t; while (q.size()) { t.push_back(q.front()); q.pop(); } cout << t; return cout; } template <typename T1, typename T2, typename T3> ostream &operator<<(ostream &cout, map<T1, T2, T3> m) { for (auto &x : m) { cout << "Key: " << x.first << ' ' << "Value: " << x.second << endl; } return cout; } template <typename T> T operator*(vector<T> v1, vector<T> v2) { assert(v1.size() == v2.size()); int n = v1.size(); T res = 0; for (int i = 0; i < n; i++) { res += v1[i] * v2[i]; } return res; } template <typename T1, typename T2> pair<T1, T2> operator+(pair<T1, T2> x, pair<T1, T2> y) { return make_pair(x.first + y.first, x.second + y.second); } template <typename T1, typename T2> void operator+=(pair<T1, T2> &x, pair<T1, T2> y) { x.first += y.first; x.second += y.second; } template <typename T1, typename T2> pair<T1, T2> operator-(pair<T1, T2> x) { return make_pair(-x.first, -x.second); } template <typename T> vector<vector<T>> operator~(vector<vector<T>> vec) { vector<vector<T>> v; int n = vec.size(), m = vec[0].size(); v.resize(m); for (int i = 0; i < m; i++) { v[i].resize(n); } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { v[i][j] = vec[j][i]; } } return v; } #endif void print0x(int x) { std::vector <int> vec; while(x) { vec.push_back(x&1); x>>=1; } std::reverse(vec.begin(),vec.end()); for(int i=0;i<(int)vec.size();i++) { std::cout<<vec[i]; } std::cout<<' '; } template <typename T> void print0x(T x,int len) { std::vector <int> vec; while(x) { vec.push_back(x&1); x>>=1; } reverse(vec.begin(),vec.end()); for(int i=vec.size();i<len;i++) { putchar('0'); } for(int i=0;i<vec.size();i++) { std::cout<<vec[i]; } std::cout<<' '; } #endif using namespace std; int n,k; int a[55]; int s[55]; int g[55][2505]; vector <pii> res; inline void error() { cout<<-1<<endl; exit(0); } inline void putV(int col) { res.push_back(mp(1,col+1)); // cout<<1<<' '<<col+1<<endl; } inline void putH(int row) { res.push_back(mp(2,row+1)); // cout<<2<<' '<<row+1<<endl; } int main() { // freopen("input.txt","r",stdin); // freopen("1.out","w",stdout); // // freopen("input.txt","r",stdin); scanf("%d%d",&n,&k); for(int i=0;i<n;i++) { scanf("%d",a+i); s[i%k]+=a[i]; } for(int i=0;i<k;i++) { s[i]%=k; } for(int i=0;i<n%k;i++) { if(s[i]!=s[0]) error(); } for(int i=n%k+1;i<k;i++) { if(s[i]!=s[n%k]) error(); } for(int i=1;i<n;i++) { while(a[i]<a[i-1]) { a[i]+=k; putV(i); } } for(int i=0;i<n;i++) { for(int j=0;j<a[i];j++) { g[i][j]=true; } } memset(s,0,sizeof(s)); for(int h=0;h<a[n-1];h++) { for(int i=n-1;i>=k-1;i--) { if(g[i][h]) continue; putH(i-k+1); for(int j=i-k+1;j<=i;j++) { s[j]++; g[j][h]=true; } } } for(int i=0;i<k;i++) { for(int j=0;j<k;j++) { putV(i); } // cout<<a[i]<<' '<<s[i]<<' '<<k*k<<' '<<a[n-1]<<endl; a[i]=a[i]+s[i]+k*k-a[n-1]; } for(int i=0;i<k;i++) { assert(a[i]<=k*k); while(a[i]<k*k) { a[i]+=k; putV(i); } } for(int i=k;i<n;i++) { for(int j=0;j<k;j++) { putV(i); } } for(int i=0;i<k;i++) { a[i]-=k*k; } if(n%k!=0) { int t=a[n%k-1]; while(t--) { for(int i=n%k;i<n;i+=k) { putH(i); } } } cout<<res.size()<<endl; for(auto &p:res) { cout<<p.first<<' '<<p.second<<endl; } return 0; }

Compilation message (stderr)

joiris.cpp: In function 'int main()':
joiris.cpp:391:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  391 |  scanf("%d%d",&n,&k);
      |  ~~~~~^~~~~~~~~~~~~~
joiris.cpp:394:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  394 |   scanf("%d",a+i);
      |   ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...