Submission #1177665

#TimeUsernameProblemLanguageResultExecution timeMemory
1177665madamadam3Sphinx's Riddle (IOI24_sphinx)C++20
0 / 100
0 ms420 KiB
#include "sphinx.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
using vi = vector<int>; 
using vl = vector<ll>;
using vvi = vector<vi>;
using vvl = vector<vl>;

int N, M;
vvi adj;
vi G;

int queryTwo(int a, int b, int colourA, int colourB) {
  vi E(N, N);
  E[a] = colourA;
  E[b] = colourB;

  return perform_experiment(E);
}

int findColour(int a) {
  if (G[a] != -1) return G[a];

  int neighbour = adj[a][0];
  int CCs = queryTwo(a, neighbour, -1, -1);

  for (int colour = 0; colour < N; colour++) {
    int x1 = queryTwo(a, neighbour, colour, -1);
    int x2 = queryTwo(a, neighbour, -1, colour);

    if (CCs == 1 && x1 == 1) {
      G[a] = G[neighbour] = colour;
      break;
    } else if (x1 == 1) {
      G[neighbour] = colour;
    } else if (x2 == 1) {
      G[a] = colour;
    }
  }

  return G[a];
}

vi find_colours(int N, vi X, vi Y) {
  N = N, M = (int) X.size();

  adj.assign(N, vi());
  for (int i = 0; i < M; i++) {
    adj[X[i]].push_back(Y[i]);
    adj[Y[i]].push_back(X[i]);
  }
  
  G.assign(N, -1);
  int CCs = perform_experiment(vi(N, -1));

  if (N == 2) { // 3/100 pts
    for (int colour = 0; colour < N; colour++) {
      findColour(0);
    }

    return G;
  }

  if (N <= 50) {

    return G; 
  }


  return G;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...