Submission #44097

#TimeUsernameProblemLanguageResultExecution timeMemory
44097imaxblueShift (POI11_prz)C++17
36 / 100
364 ms22464 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define mp make_pair #define pb push_back #define x first #define y second #define pii pair<int, int> #define p3i pair<pii, int> #define pll pair<ll, ll> #define p3l pair<pll, ll> #define lseg L, (L+R)/2, N*2+1 #define rseg (L+R)/2+1, R, N*2+2 #define ub upper_bound #define lb lower_bound #define pq priority_queue #define MN 1000000007 #define fox(k, x) for (int k=0; k<x; ++k) #define fox1(k, x) for (int k=1; k<=x; ++k) #define foxr(k, x) for (int k=x-1; k>=0; --k) #define fox1r(k, x) for (int k=x; k>0; --k) #define ms multiset #define flood(x) memset(x, 0x3f3f3f3f, sizeof x) #define drain(x) memset(x, 0, sizeof x) #define rng() ((rand() << 14)+rand()) #define scan(X) do{while((X=getchar())<'0'); for(X-='0'; '0'<=(_=getchar()); X=(X<<3)+(X<<1)+_-'0');}while(0) char _; #define pi 3.14159265358979323846 short n, a[5005], pos[5005], last[2005], c, p; vector<short> v; vector<pair<short, char> > ans, ans2; int main(){ cin >> n; fox(l, n){ cin >> a[l]; pos[a[l]]=l; } fox1(l, n){ if (l==1) continue; c=0; p=pos[l]; if (a[(p-1+n)%n]==l-1) continue; v.clear(); //cout << p << endl; fox(l2, n){ if (a[l2]!=l) v.pb(a[l2]); } fox(l2, n-1){ if (v[l2]<l) last[l2]=v[l2]; else last[l2]=last[(l2-2+n)%(n-1)]; } fox(l2, n-1){ if (v[l2]<l) last[l2]=v[l2]; else last[l2]=last[(l2-2+n)%(n-1)]; } ans.pb(mp(n-p, 'a')); p%=(n-1); while(v[(p+n-2)%(n-1)]!=l-1 && !(v[(p+n-3)%(n-1)]==l-1 && last[(p+n-2)%(n-1)]==l-1)){ ans.pb(mp(2, 'a')); c++; //cout << p << endl; if (c>n){ cout << "NIE DA SIE"; return 0; } p=(p+n-3)%(n-1); ans.pb(mp(1, 'b')); } a[0]=l; fox(l2, n-1-p) a[l2+1]=v[p+l2]; fox(l2, p){ a[n-p+l2]=v[l2]; } fox(l, n){ pos[a[l]]=l; //cout << a[l] << ' '; } //cout << endl; } ans.pb(mp(n-pos[1], 'a')); fox(l, ans.size()){ ans[l].x%=n; if (ans[l].x==0) continue; if (ans2.size() && ans2.back().y==ans[l].y){ ans2.back().x=(ans2.back().x+ans[l].x)%n; if (ans2.back().x==0) ans2.pop_back(); continue; } ans2.pb(ans[l]); } ans=ans2; cout << ans.size() << endl; fox(l, ans.size()){ cout << ans[l].x%n << ans[l].y << ' '; } return 0; } /* 1 5 3 2 4 5 3 2 4 1 2 5 3 4 1 4 1 2 5 3 */

Compilation message (stderr)

prz.cpp: In function 'int main()':
prz.cpp:18:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(k, x) for (int k=0; k<x; ++k)
prz.cpp:82:9:
     fox(l, ans.size()){
         ~~~~~~~~~~~~~             
prz.cpp:82:5: note: in expansion of macro 'fox'
     fox(l, ans.size()){
     ^~~
prz.cpp:18:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define fox(k, x) for (int k=0; k<x; ++k)
prz.cpp:94:9:
     fox(l, ans.size()){
         ~~~~~~~~~~~~~             
prz.cpp:94:5: note: in expansion of macro 'fox'
     fox(l, ans.size()){
     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...