题目链接:取石子

链接:https://www.nowcoder.com/acm/contest/122/B

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

现在有两堆石子,两个人轮流从中取石子,且每个人每一次只能取1、3或9个石子,取到最后一个石子的人win。
假设先手后手都会选择最好的方式来取石子,请您判断先后手的输赢情况。

输入描述:

多组输入
每组一行,一行包括两个正整数n1和n2(1<=n1<=100,1<=n2<=100),代表了两堆石子的数目

输出描述:

如果先手能赢,输出"win";否则就输出"lose"。
示例1

输入

复制

1 1
1 2

输出

复制

lose
win

参考文章:点击打开链接

博弈论总结:点击打开链接

1、定义:

(1)只有两人参与。

(2)游戏局面的状态集合是有限。

(3)对于同一个局面,两个游戏者的可操作集合完全相同

(4)游戏者轮流进行游戏。

(5)当无法进行操作时游戏结束,此时不能进行操作的一方算输。

(6)无论游戏如何进行,总可以在有限步数之内结束。

1.可选步数为1~m的连续整数,直接取模即可,SG(x) = x % (m+1);

2.可选步数为任意步,SG(x) = x;

3.可选步数为一系列不连续的数,用GetSG()计算

模板1如下(SG打表):

[cpp] view plaincopy
  1. //f[]:可以取走的石子个数
  2. //sg[]:0~n的SG函数值
  3. //hash[]:mex{}
  4. int f[N],sg[N],hash[N];
  5. void getSG(int n)
  6. {
  7. int i,j;
  8. memset(sg,0,sizeof(sg));
  9. for(i=1;i<=n;i++)
  10. {
  11. memset(hash,0,sizeof(hash));
  12. for(j=1;f[j]<=i;j++)
  13. hash[sg[i-f[j]]]=1;
  14. for(j=0;j<=n;j++)    //求mes{}中未出现的最小的非负整数
  15. {
  16. if(hash[j]==0)
  17. {
  18. sg[i]=j;
  19. break;
  20. }
  21. }
  22. }
  23. }

模板2如下(dfs):

[cpp] view plaincopy
  1. int f[105],sg[1005];//f[]为所要拿取的球数
  2. int sg_dfs(int x)
  3. {
  4. if(sg[x]!=-1)
  5. return sg[x];
  6. bool visited[1005];//必须在函数里面定义,在全局定义会出错
  7. memset(visited,0,sizeof(visited));
  8. for(int i=1;i<=30;i++)//i<=f[]的项数
  9. {
  10. if(x>=f[i])
  11. visited[sg_dfs(x-f[i])]=1;
  12. }
  13. for(int i=0;;i++)
  14. if(!visited[i])
  15. {
  16. sg[x]=i;
  17. break;
  18. }
  19. return sg[x];
  20. }
  21. int main()
  22. {
  23. memset(sg,-1,sizeof(sg));//sg[]初始化为-1
  24. sort(f,f+n);//将f[]排列
  25. if(sg_dfs(m)^sg_dfs(n)^sg_dfs(p))
  26. cout<<1<<endl;
  27. else
  28. cout<<0<<endl;
  29. return 0;
  30. }

AC代码:

#include<stdio.h>
#include<string.h>int f[5],sg[1010];//f[]为所要拿取的球数 int sg_dfs(int x)
{if(sg[x]!=-1) return sg[x];int book[1010];//必须在函数里定义,全局定义会出错 memset(book,0,sizeof(book));for(int i=1;i<=3;i++)//i<=f[]的项数 {if(x>=f[i]) book[sg_dfs(x-f[i])]=1;}for(int i=0;;i++){if(book[i]==0){sg[x]=i;break;}}return sg[x];
}int main()
{memset(sg,-1,sizeof(sg));//sg[]初始化为-1 f[1]=1;f[2]=3;f[3]=9;int n,m;while(~scanf("%d%d",&n,&m)){if(sg_dfs(n)^sg_dfs(m)==0) printf("lose\n");else printf("win\n");}return 0;
}

南昌大学航天杯第二届程序设计竞赛校赛网络同步赛B 取石子(博弈SG函数模板)相关推荐

  1. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 部分题解

    A-ID and password 签到题. #include <iostream> #include <cstdio> #include <bits/stdc++.h& ...

  2. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛题解

    A,C,I签到题,只搞了8题,还一题是神仙做的,我不会 链接:https://www.nowcoder.com/acm/contest/122/B 来源:牛客网 取石子 时间限制:C/C++ 1秒,其 ...

  3. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 - 题解

    A - ID and password 题目描述 Users prefer simple passwords that are easy to remember, but such passwords ...

  4. 第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B lca水 D 思维,找规律...

    第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B. Borrow Classroom 题意:一棵树,点 1为根,一个人从点 b到 点 c再到点 1,第二个人从点 a出发,问第二个人能否截住第一个 ...

  5. 南昌大学航天杯第二届部分题解

    这个比赛的题目考的比较多的都是大数运算,或者unsigned long long 的数据范围(1e18以内). 首先是a题,签到,只不过是加了英文的描述,大意就是多组数据输入,然后将每组的字符串大写转 ...

  6. 浙江农林大学蓝桥杯程序设计竞赛校选拔赛(同步赛)签到题ABFGHIJ

    A. uu与糖果 链接:https://ac.nowcoder.com/acm/contest/12479/A 来源:牛客网 题目描述 uu是一个伟大的魔法师,她有n堆糖果. 由于她想得到更多的糖果, ...

  7. 浙江农林大学第二十一届程序设计竞赛校选拔赛(同步)

    瓜瓜的A+B #include <iostream> using namespace std;typedef long long ll;ll qmi(ll a, ll b, ll p) { ...

  8. 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)

    链接:https://ac.nowcoder.com/acm/contest/635/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  9. 浙江农林大学第二十一届程序设计竞赛校选拔赛A E G H

    A 瓜瓜的春天 传送门 题意:电梯前有两列队伍,电梯一次可以坐两人,其中 有 25% 的可能,电梯是满的,没有办法乘坐电梯: 有 25% 的可能,电梯是空的,则两队队首都可以乘坐电梯: 有 50% 的 ...

最新文章

  1. 辽宁省计算机专业A类,辽宁省2008年中职升高职招生考试计算机专业综合试题
  2. Connectify错误“Internet Connection Sharing is currently unavailable.”解决方法不要有多重的网桥连接
  3. JAVA——HttpClient封装工具类
  4. 650c公路车推荐_2020最具性价比的中高端公路整车盘点
  5. c# maiform父窗体改变动态的gridew 奇偶行变色的快捷方法
  6. shiro将session认证改成token认证_初步学习Shiro框架 第一集
  7. python库--Numpy and pandas
  8. 对WebBrowser控件设置代理
  9. FFmpeg之编译ffplay(十四)
  10. docker镜像的常用操作
  11. c语言翻转棋ai算法,有没有人懂黑白棋(翻转棋)的核心算法
  12. 【科研作图】软件推荐资源汇总PPT瑞思拜!
  13. 常见分布 的 数学期望以及方差公式
  14. 贝塞尔曲线及实践案例
  15. 使对话框的最大化、最小化和关闭按钮变灰以及对其重载的方法
  16. 大数据:大二上期期末感悟及总结
  17. javascript数组(array)的常用方法(shift/unshift/pop/push/concat/splice/reverse/sort/slice/join)
  18. Pro ASP.NET Core MVC(四)【C#关键特征】
  19. VRAR景点虚拟漫游感受超震撼、高逼真的创新旅游体验
  20. WIN7下使用iis搭建php环境(上)

热门文章

  1. 6. 模数转换器ADC
  2. vue-avatar-tailor,vue头像裁剪组件
  3. 微信服务号运营的8大策略有哪些?
  4. 自动档车正确起步、停车的权威做法
  5. 2017年陕西省网络空间安全技术大赛·Mobile T5
  6. 智能热水器解决方案享受智悦生活
  7. 关于感恩节的两条短信
  8. 网站在线偷拍照片源码
  9. debian 配置无线网络
  10. WKWebView 加载 http:// ** 报错WebPageProxy::didFailProvisionalLoadForFrame: