Submission #600325

#TimeUsernameProblemLanguageResultExecution timeMemory
600325PlurmMonster Game (JOI21_monster)C++17
10 / 100
209 ms848 KiB
#include <bits/stdc++.h>
#include "monster.h"
using namespace std;

namespace {

int qrs[256][256];

}  // namespace

vector<int> Solve(int N) {
  vector<int> T(N, -1);
  for(int i = 0; i < N; i++){
    for(int j = i+1; j < N; j++){
      qrs[i][j] = Query(i, j);
      qrs[j][i] = !qrs[i][j];
    }
  }
  set<int> rem;
  vector<int> cdd;
  for(int i = 0; i < N; i++){
    int sw = 0;
    for(int j = 0; j < N; j++){
      if(i == j) continue;
      if(qrs[i][j]){
        sw++;
      }
    }
    if(sw == N-2){
      cdd.push_back(i);
    }
  }
  if(cdd.size() == 2){
    if(!qrs[cdd.front()][cdd.back()]){
      T[cdd.front()] = N-1;
    }else{
      T[cdd.back()] = N-1;
    }
  }else{
    printf("Something is wrong at start\n");
  }
  for(int it = 0; it < N-1; it++){
    cdd.clear();
    for(int i = 0; i < N; i++){
      if(rem.count(i)) continue;
      int sw = 0;
      for(int j = 0; j < N; j++){
        if(rem.count(j)) continue;
        if(i == j) continue;
        if(qrs[i][j]){
          sw++;
        }
      }
      if(sw == 1){
        cdd.push_back(i);
      }
    }
    if(cdd.size() == 3){
      for(int i = 0; i < 3; i++){
        if(T[cdd[i]] == N-1){
          cdd.erase(cdd.begin()+i);
          break;
        }
      }
    }
    if(cdd.size() == 2){
      if(qrs[cdd.front()][cdd.back()]){
        T[cdd.front()] = it;
        rem.insert(cdd.front());
      }else{
        T[cdd.back()] = it;
        rem.insert(cdd.back());
      }
    }else if(cdd.size() == 1){
      T[cdd.back()] = it;
    }else{
      printf("Something is wrong at %d: %d %d %d\n", it, cdd[0], cdd[1], cdd[2]);
    }
  }
  return T;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...