【一本通提高博弈论】巧克力棒
题目描述
TBL \texttt{TBL} TBL 和 X \texttt{X} X 用巧克力棒玩游戏。每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度。 TBL \texttt{TBL} TBL 先手两人轮流,无法操作的人输。 他们以最佳策略一共进行了 10 10 10 轮(每次一盒)。你能预测胜负吗?
输入
输入数据共 20 20 20 行。 第 2 i − 1 2i-1 2i−1 行一个正整数 N i N_i Ni,表示第 i i i 轮巧克力棒的数目。 第 2 i 2i 2i 行 N i N_i Ni 个正整数 L i , j L_{i,j} Li,j,表示第 i i i 轮巧克力棒的长度。
输出
输出数据共
10
10
10 行。 每行输出 YES
或 NO
,表示
TBL
\texttt{TBL}
TBL 是否会赢。如果胜则输出 NO
,否则输出 YES
样例输入
3
11 10 15
5
13 6 7 15 3
2
15 12
3
9 7 4
2
15 12
4
15 12 11 15
3
2 14 15
3
3 16 6
4
1 4 10 3
5
8 7 7 5 12
样例输出
YES
NO
YES
YES
YES
NO
YES
YES
YES
NO
提示
20
%
20\%
20% 的分数,
N
≤
5
,
L
≤
100
N\le5,L\le100
N≤5,L≤100。
40
%
40\%
40% 的分数,
N
≤
7
N\le7
N≤7。
50
%
50\%
50% 的分数,
L
≤
5
×
1
0
3
L \le 5 \times 10^3
L≤5×103。
100
%
100\%
100% 的分数,
N
≤
14
,
L
≤
1
0
9
N\le14,L\le10^9
N≤14,L≤109。
Code
#include <bits/stdc++.h>
using namespace std;
int main()
{
for (int i = 1; i <= 10; ++i)
{
int n, a[20], flag = false;
cin >> n;
for (int i = 0; i < n; ++i)
cin >> a[i];
for (int i = 1; i < (1 << n); ++i)
{
int r = 0;
for (int j = 0; j < n; ++j)
if (i & (1 << j))
r ^= a[j];
if (!r)
{
puts("NO");
flag = true;
break;
}
}
if (flag == false)
puts("YES");
}
}
广告
绿树公司 - 官方网站:https://wangping-lvshu.github.io/LvshuNew/
绿树智能 - 官方网站:https://wangping-lvshu.github.io/LvshuZhineng/
(现在使用,人人均可获得300元大奖)