步骤 5:Bob 根据 Catherine 给出的信息,猜出 Catherine 告诉 Alice 的数是多少。
然⽽,Alice 和 Bob 被这个魔术难倒了,于是他们不得不寻求你的帮助。请你写一段程序,实现 Alice 和 Bob 的策略,以帮助他们赢得 Catherine 的挑战。
Solution
注意到利用树的形态+编号很难刻画这个数,因为删掉一半的边后整棵树会变得非常不一样。
考虑利用数论去确定这个数。具体的,对于一个数 v(2≤v≤n),让 Xmod(v−1)+1 和 v 连边,这样交互库删掉一半的边后剩下的边也能通过 CRT 非常宽松地得到 X。
Code
Alice
1 2 3 4 5 6 7 8 9 10
#include"Alice.h" #include<bits/stdc++.h>
std::vector<std::pair<int, int>> Alice() { int n = 5000; longlong x = setN(n); std::vector<std::pair<int, int>> ed; for (int i = 2; i <= n; ++i) ed.emplace_back(x % (i - 1) + 1, i); return ed; }