Submission #1301901

#TimeUsernameProblemLanguageResultExecution timeMemory
1301901vako_pPark (JOI17_park)C++20
10 / 100
250 ms1316 KiB
#include "park.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define sd second

const int mxN = 1500;
ll n; 
random_device rd;
mt19937_64 gen(rd());

ll query(ll x, ll y, vector<ll> v){
  if(x > y) swap(x, y);
  // cout << x << ' ' << y << '\n';
  // cout << " --> ";
  // for(auto it : v) cout << it << ' ';
  // cout << endl;
  int place[n]; 
  for(int i = 0; i < n; i++) place[i] = 0;
  for(auto it : v) place[it] = 1;
  return Ask(x, y, place);
}

void ans(ll x, ll y){
  if(x > y) swap(x, y);
  // cout << x << ' ' << y << endl;
  Answer(x, y);
}

void f(vector<ll> v){
  // cout << " ------> ";
  // for(auto it : v) cout << it << ' ';
  // cout << endl;
  ll sz = v.size();
  if(sz == 1) return;
  if(sz == 2){
    ans(v[0], v[1]);
    return;
  }
  uniform_int_distribution<ll> dis(0, sz - 1);
  ll at = v[dis(gen)],sz1 = 0;
  vector<vector<ll>> v1;
  vector<ll> vv;
  for(auto it : v) if(it != at) vv.pb(it);
  for(auto it : v){
    if(it == at) continue;
    if(query(at, it, {at, it})) ans(at, it);
    bool ok = true; 
    for(int i = 0; i < sz1; i++) if(query(it, v1[i][0], vv)){
      ok = false;
      v1[i].pb(it);
      break;
    } 
    if(ok){
      sz1++;
      v1.pb({it});
    }
  }
  // cout << " --> " << sz1 << endl;
  for(int i = 0; i < sz1; i++){
    f(v1[i]);
  } 
}

void Detect(int T, int N) {
  n = N;
  vector<ll> v;
  for(int i = 0; i < n; i++) v.pb(i);
  f(v);
  return;
}
#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...