이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |