Submission #1212780

#TimeUsernameProblemLanguageResultExecution timeMemory
1212780k1r1t0Magic Show (APIO24_show)C++20
Compilation error
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;
}
//*/

Compilation message (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