列表

详情


NC50618. 巧克力棒

描述

TBL和X用巧克力棒玩游戏。每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度。TBL先手两人轮流,无法操作的人输。他们以最佳策略一共进行了10轮(每次一盒)。你能预测胜负吗?

输入描述

输入数据共20行。第2i-1行一个正整数N_i,表示第i轮巧克力棒的数目。第2i行N_i个正整数,表示第i轮巧克力棒的长度。

输出描述

输出数据共10行。每行输出YES或NO,表示TBL是否会赢。如果胜则输出NO,否则输出YES。

示例1

输入:

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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 588K, 提交时间: 2020-06-02 20:35:41

#include<bits/stdc++.h>
#define reg register
int n,sg[16];
int dfs(int x=1,int S=0,int flag=0)
{
	if(x>n)
	{
		return flag&&!S;
	}
	return dfs(x+1,S,flag)||dfs(x+1,S^sg[x],1); 
}
int main()
{
	for(reg int T=10;T;--T)
	{
		scanf("%d",&n);
		for(reg int i=1;i<=n;++i)
		scanf("%d",sg+i);
		printf(dfs()?"NO\n":"YES\n");
	}
	return 0;
}

Python3 解法, 执行用时: 80ms, 内存消耗: 7060K, 提交时间: 2021-12-15 16:56:10

    
def dfs(x, S, flag):
    global n
    global sg
    if(x>n):
        return flag and (not S)
    return dfs(x+1,S,flag) or dfs(x+1, S^sg[x],1)

for _ in range(10):
    n = int(input())
    sg = [0] + list(map(int, input().split()))
    if dfs(1, 0, 0):
        print("NO")
    else:
        print("YES")

上一题