제출 #1212780

#제출 시각아이디문제언어결과실행 시간메모리
1212780k1r1t0마술쇼 (APIO24_show)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; ll setN(int n); vector<pair<int, int>> Alice() { /////////////////////////////////////////////////////////////// const int K = 60; const int T = 83; const int N = K * T; const int S = 2341234; mt19937 rng(S); vector<int> ord(N); iota(begin(ord), end(ord), 0); shuffle(begin(ord), end(ord), rng); vector<int> bt[K]; for (int i = 0; i < K; i++) { bt[i].clear(); for (int j = i * T; j < (i + 1) * T; j++) bt[i].push_back(ord[j]); } vector<int> zero(N), one(N); for (int i = 0; i < N; i++) { int cnt = i + 2; zero[i] = rng() % cnt; one[i] = rng() % (cnt - 1); if (zero[i] <= one[i]) one[i]++; zero[i] -= 2; one[i] -= 2; } /////////////////////////////////////////////////////////////// ll X = setN(N + 2); vector<pair<int, int>> tt; for (int i = 0; i < K; i++) { int b = (X >> i) & 1; for (int j : bt[i]) { int k = (b == 0 ? zero[j] : one[j]); tt.push_back({j + 3, k + 3}); } } tt.push_back({1, 2}); return tt; /////////////////////////////////////////////////////////////// } ll Bob(vector<pair<int, int>> V) { /////////////////////////////////////////////////////////////// const int K = 60; const int T = 83; const int N = K * T; const int S = 2341234; mt19937 rng(S); vector<int> ord(N); iota(begin(ord), end(ord), 0); shuffle(begin(ord), end(ord), rng); vector<int> bt[K]; for (int i = 0; i < K; i++) { bt[i].clear(); for (int j = i * T; j < (i + 1) * T; j++) bt[i].push_back(ord[j]); } vector<int> zero(N), one(N); for (int i = 0; i < N; i++) { int cnt = i + 2; zero[i] = rng() % cnt; one[i] = rng() % (cnt - 1); if (zero[i] <= one[i]) one[i]++; zero[i] -= 2; one[i] -= 2; } /////////////////////////////////////////////////////////////// int vv[N]; for (int i = 0; i < N; i++) vv[i] = -3; for (auto [u, v] : V) { if (u > v) swap(u, v); if (v >= 2) vv[v - 3] = u - 3; } ll X = 0; for (int i = 0; i < K; i++) { int b = -1; for (int j : bt[i]) { if (vv[j] == -3) continue; if (vv[j] == zero[j]) b = 0; else b = 1; break; } assert(b != -1); if (b) X |= (1ll << i); } return X; /////////////////////////////////////////////////////////////// } /* void error(const std::string &info){ std::cout << info << std::endl; exit(0); } class AliceGrader{ int n; long long X; std::vector<std::pair<int,int>> V; public: void Main(){ std::cin >> X; if(X < 1 || X > 1000000000000000000ll){ error("Error: input value X is invalid."); } n = -1; V = Alice(); if(n == -1){ error("Error: function setN() is not called by function Alice()."); } if((int) V.size() != n - 1){ error("Error: number of edges returned by Alice() is not n-1."); } for(int i = 0;i < n - 1;++i){ if(V[i].first <= 0 || V[i].first > n || V[i].second <= 0 || V[i].second > n){ error("Error: edges returned by Alice() have invalid node."); } } std::cout << n << std::endl; for(int i = 0;i < n - 1;++i){ std::cout << V[i].first << " " << V[i].second << std::endl; } } long long setN(int N){ if(n != -1){ error("Error: function setN() is called twice by function Alice()."); } if(N < 2 || N > 5000){ error("Error: value N in function setN() is invalid."); } n = N; return X; } }aliceGrader; class BobGrader{ int n, m; long long X; std::vector<std::pair<int,int>> V; public: void Main(){ std::cin >> n >> m; if(n < 2 || n > 5000){ error("Error: input value n is invalid."); } if(m < n - 1 - (n - 2) / 2 || m > n - 1){ error("Error: input value m is invalid."); } V.resize(m); for(int i = 0;i < m;++i){ std::cin >> V[i].first >> V[i].second; if(V[i].first <= 0 || V[i].first > n || V[i].second <= 0 || V[i].second > n){ error("Error: input edges have invalid node."); } } X = Bob(V); if(X < 1 || X > 1000000000000000000ll){ error("Error: value X returned by Bob() is invalid."); } std::cout << X << std::endl; } }bobGrader; long long setN(int N){ return aliceGrader.setN(N); } int main(){ int T; std::cin >> T; if(T == 1){ aliceGrader.Main(); } else if(T == 2){ bobGrader.Main(); } else{ error("Error: input value T is invalid."); } return 0; } //*/
#include <bits/stdc++.h> using namespace std; using ll = long long; ll setN(int n); vector<pair<int, int>> Alice() { /////////////////////////////////////////////////////////////// const int K = 60; const int T = 83; const int N = K * T; const int S = 2341234; mt19937 rng(S); vector<int> ord(N); iota(begin(ord), end(ord), 0); shuffle(begin(ord), end(ord), rng); vector<int> bt[K]; for (int i = 0; i < K; i++) { bt[i].clear(); for (int j = i * T; j < (i + 1) * T; j++) bt[i].push_back(ord[j]); } vector<int> zero(N), one(N); for (int i = 0; i < N; i++) { int cnt = i + 2; zero[i] = rng() % cnt; one[i] = rng() % (cnt - 1); if (zero[i] <= one[i]) one[i]++; zero[i] -= 2; one[i] -= 2; } /////////////////////////////////////////////////////////////// ll X = setN(N + 2); vector<pair<int, int>> tt; for (int i = 0; i < K; i++) { int b = (X >> i) & 1; for (int j : bt[i]) { int k = (b == 0 ? zero[j] : one[j]); tt.push_back({j + 3, k + 3}); } } tt.push_back({1, 2}); return tt; /////////////////////////////////////////////////////////////// } ll Bob(vector<pair<int, int>> V) { /////////////////////////////////////////////////////////////// const int K = 60; const int T = 83; const int N = K * T; const int S = 2341234; mt19937 rng(S); vector<int> ord(N); iota(begin(ord), end(ord), 0); shuffle(begin(ord), end(ord), rng); vector<int> bt[K]; for (int i = 0; i < K; i++) { bt[i].clear(); for (int j = i * T; j < (i + 1) * T; j++) bt[i].push_back(ord[j]); } vector<int> zero(N), one(N); for (int i = 0; i < N; i++) { int cnt = i + 2; zero[i] = rng() % cnt; one[i] = rng() % (cnt - 1); if (zero[i] <= one[i]) one[i]++; zero[i] -= 2; one[i] -= 2; } /////////////////////////////////////////////////////////////// int vv[N]; for (int i = 0; i < N; i++) vv[i] = -3; for (auto [u, v] : V) { if (u > v) swap(u, v); if (v >= 2) vv[v - 3] = u - 3; } ll X = 0; for (int i = 0; i < K; i++) { int b = -1; for (int j : bt[i]) { if (vv[j] == -3) continue; if (vv[j] == zero[j]) b = 0; else b = 1; break; } assert(b != -1); if (b) X |= (1ll << i); } return X; /////////////////////////////////////////////////////////////// } /* void error(const std::string &info){ std::cout << info << std::endl; exit(0); } class AliceGrader{ int n; long long X; std::vector<std::pair<int,int>> V; public: void Main(){ std::cin >> X; if(X < 1 || X > 1000000000000000000ll){ error("Error: input value X is invalid."); } n = -1; V = Alice(); if(n == -1){ error("Error: function setN() is not called by function Alice()."); } if((int) V.size() != n - 1){ error("Error: number of edges returned by Alice() is not n-1."); } for(int i = 0;i < n - 1;++i){ if(V[i].first <= 0 || V[i].first > n || V[i].second <= 0 || V[i].second > n){ error("Error: edges returned by Alice() have invalid node."); } } std::cout << n << std::endl; for(int i = 0;i < n - 1;++i){ std::cout << V[i].first << " " << V[i].second << std::endl; } } long long setN(int N){ if(n != -1){ error("Error: function setN() is called twice by function Alice()."); } if(N < 2 || N > 5000){ error("Error: value N in function setN() is invalid."); } n = N; return X; } }aliceGrader; class BobGrader{ int n, m; long long X; std::vector<std::pair<int,int>> V; public: void Main(){ std::cin >> n >> m; if(n < 2 || n > 5000){ error("Error: input value n is invalid."); } if(m < n - 1 - (n - 2) / 2 || m > n - 1){ error("Error: input value m is invalid."); } V.resize(m); for(int i = 0;i < m;++i){ std::cin >> V[i].first >> V[i].second; if(V[i].first <= 0 || V[i].first > n || V[i].second <= 0 || V[i].second > n){ error("Error: input edges have invalid node."); } } X = Bob(V); if(X < 1 || X > 1000000000000000000ll){ error("Error: value X returned by Bob() is invalid."); } std::cout << X << std::endl; } }bobGrader; long long setN(int N){ return aliceGrader.setN(N); } int main(){ int T; std::cin >> T; if(T == 1){ aliceGrader.Main(); } else if(T == 2){ bobGrader.Main(); } else{ error("Error: input value T is invalid."); } return 0; } //*/

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

# 2번째 컴파일 단계

/usr/bin/ld: /tmp/cc9Djm2u.o: in function `Alice()':
Bob.cpp:(.text+0x6f7): undefined reference to `setN(int)'
collect2: error: ld returned 1 exit status