Description


Alice 和 Bob 总喜欢聚在一起玩游戏(T_T),今天他(她)们玩的是一款新型的取石子游戏。游戏一开始有N堆石子,Alice 和 Bob 轮流取出石子。在每次操作中,游戏者必须选择其中的一堆石子,并作出下列的其中一种操作:

  1. 移去整堆石子
  2. 假设石子堆中有X颗石子,取出Y颗石子,其中1<=Y

游戏结束的条件是:取出最后一颗石子的人胜出。众所周知,Alice和Bob都是绝顶聪明的,假设他们在游戏中都采取最优的策略,问最后谁会胜出游戏呢?

Alice先取。

20%的数据,N<=5,每堆石子数量少于10
100%的数据,T<=100,N<=100,每堆石子数量不大于1,000,000

Solution


每堆石子互不影响,那么可以分别求出sg函数。暴力求sg的话是会T的,考虑怎么快速求

当x为质数时,所有不大于x的非负整数都能取到,那么sg(x)=max{sg(i)}+1
当x为合数时,设t为x的一个最小质因数,sg(x)=sg(t)
这样记录一下每个数的最小质因数,就能类似筛质数一样筛sg函数惹

Code


#include <stdio.h>
#include <string.h>
#include <algorithm>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define drp(i,st,ed) for (int i=st;i>=ed;--i)
#define fill(x,t) memset(x,t,sizeof(x))const int N=1000005;int sg[N],rec[N],id;
int r[N];int gcd(int x,int y) {return !y?x:gcd(y,x%y);
}void pre_work() {r[1]=1;rep(i,2,N-1) {if (r[i]) continue;r[i]=i;for (int j=i;j<=N-1;j+=i) {if (!r[j]) r[j]=i;}}int mx=0;rep(i,1,N-1) {if (r[i]==i) sg[i]=mx+1;else sg[i]=sg[r[i]];mx=std:: max(mx,sg[i]);}
}int main(void) {freopen("stone0.in","r",stdin);freopen("myp.out","w",stdout);pre_work();int T; scanf("%d",&T);while (T--) {int n; scanf("%d",&n);int sum=0;rep(i,1,n) {int x; scanf("%d",&x);sum^=sg[x];}if (sum) puts("Alice");else puts("Bob");}return 0;
}

jzoj4024 [佛山市选2015]石子游戏相关推荐

  1. JZOJ4025. 【佛山市选2015】找回密码(后缀自动机SAM)

    题目描述 Description Kevin是一个热爱字符串的小孩.有一天,他把自己的微信登录密码给忘记了,万般无奈之下只好点"找回密码". 这时候,网页上出现了当初设定的密保问题 ...

  2. Leetcode1686. 石子游戏 VI[C++题解]:博弈论、按照a+b贪心

    文章目录 题目分析 题目链接 题目分析 博弈论:最坏情况下求最好. 按a[i]+b[i]a[i] + b[i ]a[i]+b[i] 从大到小排序 解释: (博弈论)每个人最优的选择都是 要求自己的−对 ...

  3. Leetcode1690. 石子游戏 VII[C++题解]:带有博弈论的区间dp

    文章目录 题目分析 状态表示 状态转移 题目链接 题目分析 补充博弈论的做题想法:让最坏情况下最好.在很多决策中,考虑所有的最坏情况,选其中最好的一个. 本题分析: 刚开始因为是个贪心题目,两个人每次 ...

  4. 牛客网CSP-S提高组赛前集训营1题解(仓鼠的石子游戏 [博弈论] + 乃爱与城市的拥挤程度 [树上DP] + 小w的魔术扑克[dfs + 离线])

    文章目录 T1:仓鼠的石子游戏 题目 题解 代码实现 T2:乃爱与城市拥挤程度 题目 题解 代码实现 T3:小w的魔术扑克 题目 题解 代码实现 T1:仓鼠的石子游戏 题目 仓鼠和兔子被禁止玩电脑,无 ...

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

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

  6. 动态规划---石子游戏

    动态规划---石子游戏 石子游戏(leetcode877) 石子游戏(leetcode1140) 石子游戏(leetcode1686) 石子游戏(leetcode877) 题目描述 亚历克斯和李用几堆 ...

  7. 石子游戏大合集[博弈论]

    题目描述(取石子游戏1) 有一种有趣的游戏,玩法如下: 玩家:2人: 道具:N颗石子: 规则: 游戏双方轮流取石子: 每人每次取走若干颗石子(最少取 1颗,最多取 K 颗): 石子取光,则游戏结束: ...

  8. 【博弈论】leetcode2029. 石子游戏 IX

    题目: Alice 和 Bob 再次设计了一款新的石子游戏.现有一行 n 个石子,每个石子都有一个关联的数字表示它的价值.给你一个整数数组 stones ,其中 stones[i] 是第 i 个石子的 ...

  9. 博弈论之取石子游戏的学习

    以下内容来自转载: 博弈问题简介 所讨论的博弈问题满足以下条件: 玩家只有两个人,轮流做出决策 游戏的状态集有限,保证游戏在有限步后结束,这样必然会产生不能操作者,其输 对任何一种局面,胜负只决定于局 ...

最新文章

  1. mysql中的输出,mysql-将输出结果作为SQL中的列
  2. python操作html5日期控件_python、js 时间日期模块time
  3. ICE简单介绍及使用示例
  4. 20181210-es6(letconst解构模版字符串原理 展开运算符、剩余运算符运用 深拷贝原理 reduce原理 箭头函数)...
  5. C++中实现 time_t, tm 相互转换
  6. 用与非门设计血型配对电路_电路板中与非门集成电路的控制原理
  7. Bailian3195 最大公约数【数论】
  8. pat1070. Mooncake (25)
  9. java 怎么调用clojure_从java调用Clojure时Clojure状态的范围
  10. c语言编程思想pdf,C 编程思想(PDF)
  11. 当今最热专家凯文•凯利最新演讲精彩全记录
  12. 英雄联盟一直连接服务器win10,浅析win10英雄联盟连接不上服务器的解决教程
  13. 猫哥教你写爬虫 047--scrapy框架
  14. 可调式减压阀行业现状调研及趋势分析报告
  15. 数分可视化笔记整理4 - 2017年内地电影和票房数据情况(条形图)
  16. 当这个类被修饰public的话,为什么源文件名必须要与类名相同
  17. 什么是闭包?什么是作用域?什么是作用域链?
  18. 人工智能免遥控 暴风65英寸人工智能电视X5 ECHO评测
  19. 苹果12面容解锁如何使用
  20. python3爬取超级课程表学校及院系的列表

热门文章

  1. python学习笔记3(字符串)
  2. 前端市场又“饱和”了,还有必要学吗?
  3. 【Spring Cloud 2】软件架构设计,Java游戏合集百度云盘
  4. linux查看历史的所有命令,linux查询历史记录命令history的用法介绍
  5. JavaScript 编程题
  6. OpenWrt软件源清华大学镜像
  7. 墨画子卿第四章第4节:凝神期的劫云
  8. Seastar Tutorial 简明教程
  9. 拿板砖的老股民说股市
  10. 配制ubuntu - 使用大全整理 (其中有转载内容,如果有您的文章,请与我联系,我将加入你的名称)