Submission #247182

#TimeUsernameProblemLanguageResultExecution timeMemory
247182dantoh000Mouse (info1cup19_mouse)C++14
38 / 100
298 ms384 KiB
#include <bits/stdc++.h>
#include "grader.h"
int n;
int Query(vector<int> q){
    int k = query(q);
    if (k == n) exit(0);//return n;
    else return k;
}
void solve(int N){
    n = N;
    vector<int> q(N);
    vector<int> ord(N);
    for (int i = 0; i < N; i++){
        q[i] = i+1;
        ord[i] = i;
    }
    srand(time(NULL));
    random_shuffle(ord.begin(),ord.end());
    vector<int> done(N,0);
    for (int I = 0; I < N; I++){
        int i = ord[I];
        if (done[i]) continue;
        int cur = Query(q);
        vector<int> C;
        for (int J = I+1; J < N ;J++){
            int j = ord[J];
            swap(q[i],q[j]);
            int K = Query(q) - cur;
            if (K == 2){
                done[i] = done[j] = 1;
                break;
            }
            else if (K == -2){
                swap(q[i],q[j]);
                done[i] = done[j] = 1;
                break;
            }
            else if (K == 1){
                C.push_back(j);
            }
            swap(q[i],q[j]);
        }
        if (C.size() == 2){
            swap(q[i],q[C[0]]);
            swap(q[i],q[C[1]]);
            int K = Query(q) - cur;
            if (K == 3){
                done[i] =done[C[0]] = done[C[1]] = 1;
            }
            else if (K == 2){
                done[i] = done[C[0]] = 1;
            }
            else{
                swap(q[i],q[C[1]]);
                swap(q[i],q[C[0]]);
                swap(q[i],q[C[1]]);
                swap(q[i],q[C[0]]);
                done[i] = done[C[1]] = 1;
            }
        }
        done[i] = 1;
    }
    for (int i = 0; i < N; i++) assert(done[i]);
    Query(q);
    return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...