894. 拆分-Nim游戏

这篇具有很好参考价值的文章主要介绍了894. 拆分-Nim游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#include<bits/stdc++.h>

using namespace std;

const int N=110;

int f[N];

int n;

int sg(int x)
{
    if(f[x]!=-1)    return f[x];
    
    unordered_set<int> S;
    for(int i=0;i<x;i++)
    {
        for(int j=0;j<=i;j++)
        {
            S.insert(sg(i)^sg(j));
        }
    }
    
    for(int i=0;;i++)
    {
        if(!S.count(i))
        {
            return f[x]=i;
        }
    }
}

int main()
{
    memset(f,-1,sizeof f);
    cin>>n;
    int res=0;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        res^=sg(x);
    }
    if(res) puts("Yes");
    else    puts("No");
    
    return 0;
}

代码非常简单,主要是怎么转换

一堆石子变成两堆石子,因为一堆石子的石子个数在减小,所以是可以结束的游戏

转换成有向图,sg(b1,b2)=sg(b1)^sg(b2)

有点难以理解文章来源地址https://www.toymoban.com/news/detail-810335.html

到了这里,关于894. 拆分-Nim游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ACwing算法基础入门代码合集

    快速排序 786.第k个数 归并排序 787.归并排序 788.逆序对的数量 二分 789.数的范围 790.数的三次方根 高精度 791.高精度加法(山西大学2023机试第三题) 792.高精度减法 793.高精度乘法 794.高精度除法 前缀和与差分 795.前缀和 796.子矩阵的和 797.差分 双指针算法 799.最长连续不重复子

    2024年01月25日
    浏览(29)
  • 第1章:算法基础【AcWing】

    阅读前导 * 表示算法的核心步骤。 关于阅读体验:本文只会在比较重要的地方才会使用语法高亮。 虽然 STL 中有相应算法,但本文只讨论原理本身。 [luogu]P1177 【模板】快速排序 利用快速排序算法将读入的 N N N 个数从小到大排序后输出。 输入格式 第 1 1 1 行为一个正整数

    2023年04月27日
    浏览(27)
  • 搜索与图论(acwing算法基础)

    排列数字 n皇后 走迷宫 单链表 点击跳转至例题 idx存的是指针 树与图的深度优先搜索 树的重心 每个节点都是一个单链表 模拟队列 hh = 0 , tt = -1 有向图的拓扑序列 都是从前指向后,即有向无环图(不能有环) 所有入度为0的点,都能排在前面的位置 删掉t-j的边,仅仅是j的入度

    2024年02月08日
    浏览(33)
  • acwing算法基础之搜索与图论--kruskal算法

    kruskal算法的关键步骤为: 将所有边按照权重从小到大排序。 定义集合S,表示生成树。 枚举每条边(a,b,c),起点a,终点b,边长c。如果结点a和结点b不连通(用并查集来维护),则将这条边加入到集合S中。 kruskal算法的时间复杂度为O(mlogm),它用来解决稀疏图的最小生成树问题

    2024年02月05日
    浏览(35)
  • acwing算法基础之动态规划--背包问题

    (零) 背包问题描述:有 N N N 个物品,每个物品的体积是 v i v_i v i ​ ,价值是 w i w_i w i ​ ,现有容量是 V V V 的背包,求这个背包能装下的物品的最大价值。 01背包问题:每个物品只有1个。 完全背包问题:每个物品有无穷多个。 多重背包问题:第 i i i 个物品有 s i s_i s

    2024年02月05日
    浏览(37)
  • 博弈论(NIM游戏——取石子)相关的题目

        1.异或的性质   🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈 2.nim游戏 (基础) 891. Nim游戏 - AcWing题库 给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为

    2023年04月23日
    浏览(29)
  • leetcode292. Nim 游戏(博弈论 - java)

    难度 - 简单 原题链接 - Nim游戏 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否

    2024年02月12日
    浏览(40)
  • Acwing-基础算法课笔记之动态规划(背包问题)

    01背包中的0和1指的是放与不放,而且不能出现放多个的情况,背包只能放相同物品中的一个; 首先是对 d [ i ] [ j ] d[i][j] d [ i ] [ j ] 数组的解释,该数组表示的是只看前 i i i 个物品,总体积是 j j j 的情况下,总价值最大是多少; 不选第 i i i 个物品,只考虑前 i − 1 i-1 i −

    2024年04月17日
    浏览(39)
  • Acwing-基础算法课笔记之搜索与图论

    bellman-ford算法适用于负权边的图,求 1 到 n 的最多经过k条边的最短距离。 如图所示: 1 2 3 dist 0 ∞ infty ∞ ∞ infty ∞ ⇓ Downarrow ⇓ 1 2 3 dist 0 1 ∞ infty ∞ ⇓ Downarrow ⇓ 1 2 3 dist 0 1 2 此过程中出现了串联的结果,所以是错误的,此时需要进行备份操作。 备份操作如下: 为了

    2024年01月20日
    浏览(41)
  • [数论第四节]容斥原理/博弈论/NIM游戏

    (|Acup Bcup C|=|A|+|B|+|C|-|Acap B|-|Acap C|-|Bcap C|+|Acap Bcap C|) (|displaystyle cup_{i=1}^n A_i |=sum_{i}|A_i|-sum_{i,j} |A_i cap A_j|+ldots +(-1)^{n+1}|cap_{i=1}^n A_i |) 时间复杂度: (C_n^1+C_n^2+C_n^3···+C_n^n=2^n-1) (O(2^n-1)) 等式右边有 (2^n-1) 项,每一项表示选取若干个集合相交的情况,可以通过

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包