제출 #312529

#제출 시각아이디문제언어결과실행 시간메모리
312529mohamedsobhi777Mouse (info1cup19_mouse)C++14
39.33 / 100
3097 ms384 KiB
#include "grader.h" #include<bits/stdc++.h> using namespace std ; int n, num ; vector<int> per, ans ; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); vector<int> indi, goods ; void del(int x){ goods.push_back(x) ; for(int i = 0 ;i < (int) indi.size() ; ++ i){ if(indi[i] == x){ indi.erase(indi.begin() + i , indi.begin() + i + 1) ; return ; } } } void print(){ for(int i = 0 ;i < n; ++ i) cout<< ans[i] <<" " ; cout<<".\n" ; } void solve(int n){ for(int i = 1;i <= n ; ++ i){ ans.push_back(i) ; } for(int i = 0 ;i < n; ++ i){ indi.push_back(i) ; } for(int i = 0 ;i < n; ++ i){ // int x ; cin >> x ; // per.push_back(x) ; } random_shuffle(ans.begin() , ans.end() ) ; int tim = 0 ; int las = 0 ; las = query(ans) ; while(tim ++ < 1000000){ int sz = (int) indi.size() ; int x = rng() % sz ; int y = rng() % sz ; x = indi[x] ; y = indi[y] ; if(x == y)continue ; swap(ans[x],ans[y]) ; int now = query(ans) ; if( abs(now - las) == 2){ del(x) ; del(y) ; }else if(now == las + 1){ if(goods.size()){ int gud = goods.back() ; vector<int> qu = ans ; swap(qu[gud],qu[x]) ; if(query(qu) == now - 2){ del(x) ; }else{ del(y) ; } } }else if(now == las -1 ){ if(goods.size()){ int gud = goods.back() ; vector<int> qu = ans ; swap(qu[x],qu[y]); swap(qu[gud],qu[x]) ; if(query(qu) == las - 2){ del(x) ; }else{ del(y) ; } } } if(now < las)swap(ans[x],ans[y]) ; las = max(las , now) ; if(now == n) break ; } return ; if(las == n) cout<<"ok " ; else { for(auto u : ans)cout<< u <<" " ; cout<<"incorrect " ; } return ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...