2023-9-10 集合-Nim游戏

2023-11-14

题目链接:集合-Nim游戏

在这里插入图片描述

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>

using namespace std;

const int N = 110, M = 10010;

int n, m;
int s[N], f[M];

int sg(int x)
{
    if(f[x] != -1) return f[x];
    // 集合S存储x可以到达的位置
    unordered_set<int> S;
    for(int i = 0; i < m; i++)
    {
        int sum = s[i];
        if(x >= sum) S.insert(sg(x - sum));
    }
    // 判断当前的集合当中不存在的最小的自然数是多少
    for(int i = 0; ; i ++)
        if(!S.count(i))
            return f[x] = i;
}

int main()
{
    cin >> m;
    for(int i = 0; i < m; i++) cin >> s[i];
    
    memset(f, -1, sizeof f);
    
    cin >> n;
    int res = 0;
    while(n--)
    {
        int x;
        cin >> x;
        res ^= sg(x);
    }
    if(res) cout << "Yes" << endl;
    else cout << "No" << endl;
    
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023-9-10 集合-Nim游戏 的相关文章

  • HP惠普服务器做RAID

    安装Raid 10 综合考虑后 使用四块sas硬盘配置Raid10 1 按开电源 废话 2 进入raid配置 3 创建raid raid 阵列 4 保存raid F8保存配置 回车下一步 5 查看raid 查看Raid 4 怎么安装系统 1
  • [LeetCode-202]-Happy Number-LeetCode 30天挑战赛-2

    文章目录 题目相关 Solution 题目相关 题目解读 给定一个正数 判断该数是否是快乐数 快乐数定义 将该数进行拆分 拆分后的各个数值的平方求和 求和的结果进行如下判断 该数是否为1 或者该数包含在一个循环中无休止地循环 如果数值是1就

随机推荐