专栏文章
题解:UVA1482 Playing With Stones
UVA1482题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip1osp1
- 此快照首次捕获于
- 2025/12/03 04:43 3 个月前
- 此快照最后确认于
- 2025/12/03 04:43 3 个月前
这是一个有向图博弈,直接考虑 SG 函数。
先设最终状态,即 ,
那么 ,
赛时可以通过暴力打表发现规律,也可以考虑数学证明。
结论:
证明:
当 时结论成立,
当 时,假设 ,结论成立,
-
:,设 为 的转移点集合,
-
对于 , 覆盖 ;
-
对于 ,发现这些 对应的 构成 的转移点,其中 ,(特别的,如果 是奇数,那么 不是 的转移点,那么 会缺一个转移点 ,但由于 ,因此不影响)。
因此 时结论成立。 -
-
:这时 相对于 的转移点来说,少了一个 ,多了一个 ,因此 。
综上所述,结论成立。
CPP#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int N = 1e2 + 5;
int n;
LL SG(LL a) {
while (a & 1) {
a = ((a - 1) >> 1);
}
return (a >> 1);
}
void solve() {
cin >> n;
LL a, sum = 0;
for (int i = 1; i <= n; i++) {
cin >> a;
sum ^= SG(a);
}
cout << (sum ? "YES\n" : "NO\n");
}
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int T;
cin >> T;
while (T--) {
solve();
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...