제출 #1075063

#제출 시각아이디문제언어결과실행 시간메모리
1075063ThanhsICC (CEOI16_icc)C++17
7 / 100
112 ms888 KiB
#include "icc.h" #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; // #define int long long // #define double long double // #define endl '\n' #define fastIO ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #define setmin(x, y) x = min((x), (y)) #define setmax(x, y) x = max((x), (y)) #define sqr(x) ((x) * (x)) #define fi first #define se second #define all(x) x.begin(), x.end() mt19937 hdp(chrono::high_resolution_clock::now().time_since_epoch().count()); int rand(int l, int r){return l + ((hdp() % (r - l + 1)) + r - l + 1) % (r - l + 1);} const int NM = 105; // void setRoad(int x, int y) // { // cout << '!' << endl; // cout << x << ' ' << y << endl; // } // int query(int n, int m, int a[], int b[]) // { // cout << '?' << endl; // // cout << n << ' ' << m << endl; // for (int i = 0; i < n; i++) // cout << a[i] << ' '; // cout << endl; // for (int i = 0; i < m; i++) // cout << b[i] << ' '; // cout << endl; // int res; // cin >> res; // return res; // } int query(vector<int>& a, vector<int>& b) { int A[a.size()], B[b.size()]; for (int i = 0; i < a.size(); i++) A[i] = a[i]; for (int i = 0; i < b.size(); i++) B[i] = b[i]; return query((int)a.size(), (int)b.size(), A, B); } int cnt = 0, NN; int BS(vector<int> a, vector<int>& b) { int l = 0, r = a.size(); while (l < r - 1) { int m = l + r >> 1; vector<int> t(a.begin(), a.begin() + m); if (query(t, b)) r = m; else l = m; } return a[r - 1]; } int id[NM], p[NM]; vector<int> v[NM]; set<int> s, did; vector<int> a, b; int find(int x) { return p[x] == x ? x : find(p[x]); } void merge(int x, int y) { x = find(x), y = find(y); if (v[x].size() < v[y].size()) swap(x, y); p[y] = x; s.erase(y); for (int t : v[y]) v[x].push_back(t); } void run(int N) { NN = N; iota(p + 1, p + 1 + N, 1); for (int i = 1; i <= N; i++) { v[i].push_back(i); s.insert(i); } for (int n = N; n >= 2; n--) { auto it = s.begin(); for (int i = 1; i <= n; i++, it = next(it)) id[i] = *it; while (1) { cnt++; assert(cnt <= 5 * NN); shuffle(id + 1, id + 1 + n, hdp); a.clear(); b.clear(); for (int i = 1; i <= n; i++) for (auto t : v[id[i]]) { if (i <= n / 2) a.push_back(t); else b.push_back(t); } if (query(a, b)) break; } int x = BS(a, b), y = BS(b, a); setRoad(x, y); merge(x, y); } } // int main() // { // int N; // cin >> N; // run(N); // }

컴파일 시 표준 에러 (stderr) 메시지

icc.cpp: In function 'int query(std::vector<int>&, std::vector<int>&)':
icc.cpp:48:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |     for (int i = 0; i < a.size(); i++)
      |                     ~~^~~~~~~~~~
icc.cpp:50:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |     for (int i = 0; i < b.size(); i++)
      |                     ~~^~~~~~~~~~
icc.cpp: In function 'int BS(std::vector<int>, std::vector<int>&)':
icc.cpp:62:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   62 |         int m = l + r >> 1;
      |                 ~~^~~
#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...