이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "library.h"
#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define SZ(x) int((x).size())
void Solve(int n){
vector<int> M(n , 1);
if(n == 1){
Answer(M);
return;
}
vector<int> res;
for(int i = 0 ; i < n ; i++){
M[i] = 0;
if(Query(M) <= 1){
res.push_back(i);
break;
}
M[i] = 1;
}
fill(all(M) , 0);
M[res[0]] = 1;
for(int i = 0 ; i < n ; i++){
if(M[i]) continue;
M[i] = 1;
if(Query(M) <= 1){
res.push_back(i);
continue;
}
M[i] = 0;
}
for(int i = SZ(res) ; i < n ; i++){
fill(all(M) , 0);
vector<int> vec;
for(int j : res){
M[j] = 1;
}
for(int j = 0 ; j < n ; j++){
if(!M[j]){
vec.push_back(j);
}
}
int lg = 0;
while((1 << lg) < SZ(vec)) lg++;
int ind = 0;
for(int j = 0 ; j < lg ; j++){
vector<int> Q;
for(int k = 0 ; k < SZ(vec) ; k++){
if(k & (1 << j)){
Q.push_back(vec[k]);
}
}
for(int k : Q){
M[k] = 1;
}
int A = Query(M);
M[res.back()] = 0;
int B = Query(M);
M[res.back()] = 1;
for(int k : Q){
M[k] = 0;
}
if(A != B){
ind |= (1 << j);
}
}
res.push_back(vec[ind]);
}
for(int i = 0 ; i < n ; i++){
res[i]++;
}
Answer(res);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |