제출 #99312

#제출 시각아이디문제언어결과실행 시간메모리
99312MercenaryICC (CEOI16_icc)C++14
90 / 100
161 ms640 KiB
#include "icc.h" #include <bits/stdc++.h> const int maxn = 105; using namespace std; vector<int> P[maxn]; int papa[maxn]; int Cal(vector<int> a , vector<int> b) { assert(a.size() > 0); int n = a.size(); if(n == 1)return a[0]; vector<int> tmp; int mid = n / 2; for(int i = 0 ; i < mid ; ++i)tmp.push_back(a[i]); if(query(tmp.size(),b.size(),tmp.data(),b.data()))return Cal(tmp,b); tmp.clear(); for(int i = mid ; i < n ; ++i)tmp.push_back(a[i]); return Cal(tmp,b); } void run(int n) { for(int i = 1 ; i <= n ; ++i)P[i].push_back(i) , papa[i] = i; for(int i = n ; i > 1 ; --i) { sort(P + 1 , P + i + 1); for(int j = 1 ; j <= i ; ++j) for(int c : P[j])papa[c] = j; vector<int> a , b; for(int j = 0 ; j < 8 ; ++j) { a.clear();b.clear(); for(int k = 1 ; k <= i ; ++k) { if((k >> j) & 1)for(int c : P[k])a.push_back(c); else for(int c : P[k])b.push_back(c); } if(a.size() == 0 || b.size() == 0)continue; if(query(a.size(),b.size(),a.data(),b.data()))break; } assert(a.size() > 0 && b.size() > 0); int u = Cal(a , b); int v = Cal(b , a); setRoad(u,v); // cout << u << " " << v << endl; u = papa[u]; v = papa[v]; // cout << u << " " << v << endl; if(u > v)swap(u,v); for(int c : P[v])papa[c] = u , P[u].push_back(c); if(i != v){ for(int c : P[i])papa[c] = v; swap(P[v],P[i]); } P[i].clear(); } }
#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...