# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
414091 | 2021-05-30T02:14:16 Z | jamezzz | Mouse (info1cup19_mouse) | C++14 | 1 ms | 200 KB |
#include "grader.h" #include <bits/stdc++.h> using namespace std; #define pf printf vector<int> todo,v; bool done[260]; int check(int x){ //swap (0,1),(2,3)...(2*x,2*x+1) for(int i=0;i<=x;++i){ swap(v[todo[2*i]],v[todo[2*i+1]]); } int res=query(v); for(int i=0;i<=x;++i){ swap(v[todo[2*i]],v[todo[2*i+1]]); } return res; } void solve(int N) { for(int i=1;i<=N;++i)v.push_back(i); while(true){ int res=query(v); if(res==N)return; if(res==0)break; random_shuffle(v.begin(),v.end()); } int pv=0; while(true){ todo.clear(); for(int i=0;i<N;++i)if(!done[i])todo.push_back(i); if(todo.size()==0)break; random_shuffle(todo.begin(),todo.end()); if(check(todo.size()/2-1)==pv)continue; int lo=0,hi=todo.size()/2-1,mid,res,val; while(lo<=hi){ mid=(lo+hi)/2; int tmp=check(mid); if(tmp==N)return; if(tmp>pv){ res=mid; val=tmp; hi=mid-1; } else lo=mid+1; } int a=todo[2*res],b=todo[2*res+1]; swap(v[a],v[b]); int nw=query(v); if(nw==N)return; if(nw==pv+2){ done[a]=true; done[b]=true; } else{ int o=0; for(int i=0;i<N;++i){ if(!done[i]&&i!=a&&i!=b){ o=i;break; } } swap(v[a],v[o]); int tmp=query(v); if(tmp==N)return; swap(v[a],v[o]); if(tmp>=nw)done[b]=true; else done[a]=true; } pv=query(v); if(pv==N)return; } return; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 1 ms | 200 KB | Execution killed with signal 13 |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 1 ms | 200 KB | Execution killed with signal 13 |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 1 ms | 200 KB | Execution killed with signal 13 |
2 | Halted | 0 ms | 0 KB | - |