Submission #1367036

#TimeUsernameProblemLanguageResultExecution timeMemory
1367036faricaChameleon's Love (JOI20_chameleon)C++20
20 / 100
17 ms452 KiB
#include "chameleon.h"
#include <cstdio>
#include <cstdlib>
#include <bits/stdc++.h>

using namespace std;
using vi = vector<int>;

int Query(const std::vector<int> &p);

void Answer(int a, int b);

void Solve(int N) {
    vector<bool>fnd(2*N+1, 0);
    vi grp[2*N+1];
    for(int i=1; i<=2*N; ++i) {
        if(fnd[i]) continue;
        for(int j=i+1; j<=2*N; ++j) {
            if(fnd[j]) continue;
            vi p;
            p.push_back(i); p.push_back(j);
            int res = Query(p);
            if(res == 1) {
                grp[i].push_back(j);
                grp[j].push_back(i);
            }
        }
    }
    for(int i=1; i<=2*N; ++i) {
        if(fnd[i]) continue;
        int siz = (int)grp[i].size();
        if(siz == 1) {
            Answer(i, grp[i][0]);
            fnd[i] = fnd[grp[i][0]] = 1;
        } else {
            vi p;
            p.push_back(i);
            p.push_back(grp[i][0]);
            p.push_back(grp[i][1]);
            int res = Query(p);
            if(res == 1) swap(grp[i][0], grp[i][2]);
            else {
                p.pop_back();
                p.push_back(grp[i][2]);
                res = Query(p);
                if(res == 1) swap(grp[i][0], grp[i][1]);
            }
        }
    }
    for(int i=1; i<=2*N; ++i) {
        if(fnd[i]) continue;
        int x = grp[i][1];
        if(grp[x][0] == i) x = grp[i][2];
        Answer(x, i);
        fnd[x] = fnd[i] = 1;
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...