제출 #1291599

#제출 시각아이디문제언어결과실행 시간메모리
1291599serkanrashidChameleon's Love (JOI20_chameleon)C++20
20 / 100
17 ms448 KiB
#include "chameleon.h"
#include <bits/stdc++.h>


using namespace std;

//int Query(const std::vector<int> &p)
//void Answer(int a, int b)

const int MAXN = 1024;

int n;
vector<int>g[MAXN];
bool vis[MAXN];


/*
4
1 0 1 0 0 1 1 0
4 4 1 2 1 2 3 3
4 3 8 7 6 5 2 1
*/

int in[MAXN],ou[MAXN];
void Solve(int N)
{
    n = N;

    for(int i = 1; i <= 2*n; i++)
    {
        for(int j = i+1; j <= 2*n; j++)
        {


            if(Query({i,j}) == 1)
            {
                g[i].push_back(j);
                g[j].push_back(i);
            }
        }
    }

    for(int i = 1; i <= 2*n; i++)
    {
        if(vis[i]) continue;

        if(g[i].size() == 1)
        {
            Answer(i,g[i][0]);
            vis[i] = 1;
            vis[g[i][0]] = 1;
            continue;
        }

        int ab = Query({i,g[i][0],g[i][1]});
        int ac = Query({i,g[i][0],g[i][2]});
        int bc = Query({i,g[i][1],g[i][2]});

        if(ab == ac) in[g[i][0]] = i;
        if(ab == bc) in[g[i][1]] = i;
        if(bc == ac) in[g[i][2]] = i;
    }
    for(int i = 1; i <= 2*n; i++) ou[in[i]] = i;

    for(int i = 1; i <= 2*n; i++)
    {
        if(vis[i]) continue;

        for(int j = 0; j < 3; j++)
        {
            if(g[i][j] != in[i] && g[i][j] != ou[i])
            {
                Answer(i,g[i][j]);
                vis[i] = 1;
                vis[g[i][j]] = 1;
                break;
            }
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...