제출 #1327116

#제출 시각아이디문제언어결과실행 시간메모리
1327116SmuggingSpunSpeedrun (RMI21_speedrun)C++20
21 / 100
15 ms568 KiB
#include "speedrun.h"
#include<bits/stdc++.h>
using namespace std;
namespace sub1{
  void init(int n, int a[], int b[]){
    setHintLen(n);
    for(int i = 1; i < n; i++){
      setHint(a[i], b[i], 1);
      setHint(b[i], a[i], 1);
    }
  }
  void solve(int n, int start){
    function<void(int, int)>dfs;
    dfs = [&] (int s, int p){
      for(int i = 1; i <= n; i++){
        if(i != p && getHint(i)){
          goTo(i);
          dfs(i, s);
          goTo(s);
        }
      }
    };
    dfs(start, -1);
  }
}
namespace sub2{
  void init(int n, int a[], int b[]){
    vector<vector<int>>g(n + 1);
    for(int i = 1; i < n; i++){
      g[a[i]].push_back(b[i]);
      g[b[i]].push_back(a[i]);
    }
    setHintLen(20);
    for(int i = 1; i <= n; i++){
      if(g[i].size() == 1){
        g[i].push_back(0);
      }
      for(int j = 0; j < 2; j++){
        for(int k = 0; k < 10; k++){
          setHint(i, j * 10 + k, g[i][j] >> k & 1);
        }
      }
    }
  }
  void solve(int n, int start){
    function<void(int, int)>dfs;
    dfs = [&] (int s, int p){
      for(int i = 0; i < 2; i++){
        int d = 0;
        for(int j = 0; j < 10; j++){
          if(getHint(i * 10 + j)){
            d |= 1 << j;
          }
        }
        if(d > 0 && d != p){
          goTo(d);
          dfs(d, s);
          goTo(s);
        }
      }
    };
    dfs(start, -1);
  }
}
namespace sub3{
  void init(int n, int a[], int b[]){
    
  }
  void solve(int n, int start){

  }
}
namespace sub45{
  void init(int n, int a[], int b[]){
    
  }
  void solve(int n, int start){

  }
}
void assignHints(int subtask, int n, int a[], int b[]){
  if(subtask == 1){
    sub1::init(n, a, b);
  }
  else if(subtask == 2){
    sub2::init(n, a, b);
  }
  else if(subtask == 3){
    sub3::init(n, a, b);
  }
  else{
    sub45::init(n, a, b);
  }
}
void speedrun(int subtask, int n, int start){
  if(subtask == 1){
    sub1::solve(n, start);
  }
  else if(subtask == 2){
    sub2::solve(n, start);
  }
  else if(subtask == 3){
    sub3::solve(n, start);
  }
  else{
    sub45::solve(n, start);
  }
}
#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...