Submission #150719

#TimeUsernameProblemLanguageResultExecution timeMemory
150719Torat (#200)On the Grid (FXCUP4_grid)C++17
43 / 100
10 ms384 KiB
#include "grid.h" #include <bits/stdc++.h> using namespace std; int n; vector<int> ans; int solve(int l,int r,vector<int> p,int cur) { if (l==r) { ans[p[l]]=cur-(n-l-1); return p[l]; } else if ((r-l)%2) { int mid=(l+r+1)/2; vector<int> np=p; for (int i=l;i<mid;i++) swap(np[i],np[mid+i-l]); int tmp=PutDisks(np); if (tmp>cur) return solve(l,mid-1,np,tmp); else return solve(l,mid-1,p,cur); } else { int mid=(l+r)/2; vector<int> np=p; for (int i=l;i<mid;i++) swap(np[i],np[mid+1+i-l]); int tmp=PutDisks(np); if (tmp>cur) return solve(l,mid-1,np,tmp); else return solve(l,mid,p,cur); } } vector<int> SortDisks(int N) { n=N; ans.resize(n); vector<int> p; for (int i=0;i<n;i++) p.push_back(i); for (int i=0;i<n;i++) { int tmp=solve(0,n-i-1,p,PutDisks(p)); p.erase(find(p.begin(),p.end(),tmp)); bool ok=0; for (int j=(int)p.size()-1;j>(int)p.size()-i-1;j--) { if (ans[tmp]>ans[p[j]]) { p.insert(p.begin()+j+1,tmp); ok=1; break; } } if (!ok) p.insert(p.begin()+n-i-1,tmp); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...