1874: [BeiJing2009 WinterCamp]取石子游戏

Time Limit: 5 Sec  Memory Limit: 162 MB
Submit: 834  Solved: 350
[Submit][Status][Discuss]

Description

小H和小Z正在玩一个取石子游戏。 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏。 小H先进行操作,他想问你他是否有必胜策略,如果有,第一步如何取石子。

Input

输入文件的第一行为石子的堆数N 接下来N行,每行一个数Ai,表示每堆石子的个数 接下来一行为每次取石子个数的种类数M 接下来M行,每行一个数Bi,表示每次可以取的石子个数,输入保证这M个数按照递增顺序排列。

Output

输出文件第一行为“YES”或者“NO”,表示小H是否有必胜策略。 若结果为“YES”,则第二行包含两个数,第一个数表示从哪堆石子取,第二个数表示取多少个石子,若有多种答案,取第一个数最小的答案,若仍有多种答案,取第二个数最小的答案。

Sample Input

4
7
6
9
3
2
1
2

Sample Output

YES
1 1

Hint
样例中共有四堆石子,石子个数分别为7、6、9、3,每人每次可以从任何一堆石子中取出1个或者2个石子,小H有必胜策略,事实上只要从第一堆石子中取一个石子即可。

数据规模和约定
数据编号 N范围 Ai范围 数据编号 N范围 Ai范围
1 N=2 Ai≤10 6 N≤10 Ai≤10
2 N=2 Ai≤1000 7 N≤10 Ai≤100
3 N=3 Ai≤100 8 N≤10 Ai≤1000
4 N≤10 Ai≤4 9 N≤10 Ai≤1000
5 N≤10 Ai≤7 10 N≤10 Ai≤1000
对于全部数据,M≤10,Bi≤10

HINT

Source

Day2

这道题其实挺裸挺容易的啦

然而我调了可能半个小时。。。。。

因为我visit(求mex)忘记开在函数里面了QAQ

然后又递归来递归去

就乱套了。。。。。

推荐一篇博客啦

其实就是转移嘛

g(x)=mex{ g(y) | y是x的后继 }

另外记住后手必胜当且仅当所有石子的异或和为0就搞定啦

一定要把visit开在函数里啊(哭唧唧)

#include<cstdio>
#include<cstring>
int a[110],f[115];
int sg[1010];
int m;
void getsg(int k)
{if(sg[k]!=-1) return;int visit[1000];memset(visit,0,sizeof(visit));for(int i=1;i<=m&&f[i]<=k;i++){getsg(k-f[i]);visit[sg[k-f[i]]]=1;}for(int i=0;;i++)if(!visit[i])    {sg[k]=i;return ;}
}
int main()
{int n;     scanf("%d",&n);for(int i=1;i<=n;i++)   scanf("%d",&a[i]);scanf("%d",&m);for(int i=1;i<=m;i++)   scanf("%d",&f[i]);int ans=0;memset(sg,-1,sizeof(sg));for(int i=1;i<=n;i++)    getsg(a[i]),    ans^=sg[a[i]];if(ans==0)         printf("NO\n");else {printf("YES\n");for(int i=1;i<=n;i++){int tmp=ans^sg[a[i]];for(int j=1;f[j]<=a[i]&&j<=m;j++){if( ! (tmp^sg[a[i]-f[j]]) )    {printf("%d %d\n",i,f[j]);return 0;}}}}return 0;
}

转载于:https://www.cnblogs.com/Brian551/p/7353003.html

bzoj1874: [BeiJing2009 WinterCamp]取石子游戏相关推荐

  1. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)

    Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 871  Solved: 365 [Submit][Status][Discuss] Descripti ...

  2. 威佐夫博弈:百练OJ:1067:取石子游戏

    威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...

  3. POJ 1067 取石子游戏

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 40917   Accepted: 13826 Descripti ...

  4. POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K              Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取 ...

  5. “美登杯”上海市高校大学生程序设计邀请赛 **D. 小花梨的取石子游戏**

    "美登杯"上海市高校大学生程序设计邀请赛 (华东理工大学) D. 小花梨的取石子游戏 Description 小花梨有?堆石子,第?堆石子数量为??,?堆石子顺时针编号为1 − ? ...

  6. poj 1067 取石子游戏(博弈+威佐夫博奕(Wythoff Game))

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29959   Accepted: 9818 Descriptio ...

  7. 【结论】取石子游戏(jzoj 1211)

    取石子游戏 jzoj 1211 题目大意: 有n个石子,每次可取1~k个石子(必须取),问先取者是否有必胜方法 输入样例 2 2 3 3 2 输出样例 No Yes 数据范围 20%的数据 K≤10 ...

  8. hdu 2516 取石子游戏

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. 信息学奥赛一本通(1218:取石子游戏)

    1218:取石子游戏 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 8837     通过数: 4144 [题目描述] 有两堆石子,两个人轮流去取.每次取的时候, ...

最新文章

  1. 规模化敏捷中的“三要”和“三不要”
  2. jdbc mysql查询整行信息_JDBC获取数据库各种信息
  3. 【原创】gooogleman亲自参与设计的三星Cortex A8 S5pv210 之Sate210核心板硬件用户手册(作者:gooogleman)...
  4. libsvm2.9数据格式
  5. SpringBoot高级-消息-JMSAMQP简介
  6. jquery响应式内容滑动插件bxSlider
  7. (75)FPGA随机函数($random)
  8. 重载操作符解析(原)
  9. c语言怎么把字符串转数组,【转】C语言 字符数组与字符串
  10. Jmeter使用插件查看服务器CPU、内存使用率
  11. 金蝶软件各版本安装包下载地址
  12. vue的Des加密解密
  13. python里面的pip是什么意思_python中pip问题
  14. FPGA 等效门数的计算方法
  15. 掌握这个思维,你的文案也能价值百万
  16. K8S—pv和pvs
  17. android 检查电话号码是否合理(含大陆和香港格式)
  18. AD7606 SPI模式 网上问题汇总
  19. 红米Note9Pro和红米Note9ProMax哪个好-区别是什么
  20. 斯坦福大学开源用于网络神经百万量级OGB基准测试的数据集

热门文章

  1. IT人士在职场中需要哪些Skill?
  2. USB-Flash MX-程序员2004合订本
  3. 域名扫描工具Fierce
  4. Visual Studio提示Bonjour backend初始化失败
  5. Xamarin iOS教程之编辑界面编写代码
  6. Android渗透测试Android渗透测试入门教程大学霸
  7. linux内存管理与设计,深入理解Linux内存管理机制(一)
  8. springboot 中文文档_比Swagger还好用的自动生成接口文档工具
  9. numa节点_漫步云端NUMA调度
  10. java 二维数组内存溢出_模拟Java内存溢出