正题


大意

有n堆石头,每堆石头有aiaia_i个每次可以拿走一堆或者Y个(仅当gcd(Y,ai)=1gcd(Y,ai)=1gcd(Y,a_i)=1)。拿走最后一堆石头的人就赢了,两个人都是聪明绝顶的。


解题思路

考虑构建SG函数:

SG(x)=mex(SG(x−y)(gcd(x,y)=1)   υ   0)SG(x)=mex(SG(x−y)(gcd(x,y)=1)υ0)

SG(x)=mex(SG(x-y)_{(gcd(x,y)=1)}\ \ \ \upsilon\ \ \ 0)
这样我们会发现如果x是质数,那么比他小的都在集合里,那么它的SG值就是之前最大的SG值+1,这样的话质数的SG值就是递增的。
我们再考虑合数,由于质数的SG值是递增的,我们会发现其实每个合数产生不了任何新的值,那么每个合数的SG值就是它的最小质因子的SG值。
这样的话质数的SG值就是它是第几个质数
我们用素数筛来计算。


代码

#include<cstdio>
using namespace std;
int t,n,ans,a,sg[1000001],tot;
void prime()
{sg[1]=1;tot=1;//第一个特判for (int i=2;i<=1000000;i++){if (!sg[i])//没有被筛过{sg[i]=++tot;//统计第几个质数for(int j=i;j<=1000000;j+=i)if (!sg[j]) sg[j]=tot;//被最小的质因子筛掉}}
}
int main()
{scanf("%d",&t);prime();//预处理while (t--){scanf("%d",&n);ans=0;for (int i=1;i<=n;i++){scanf("%d",&a);//输入ans^=sg[a];//就SG函数的和}printf("%s\n",ans?"Alice":"Bob");//判断赢家}
}

jzoj4024-石子游戏【SG函数,博弈论】相关推荐

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

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

  2. NIM数字游戏 SG函数 有向图博弈 学习记录

    写在前面:很早之前我就想写一写博弈论的学习记录了.本篇文章记录了我在学习博弈论初步时的顺序,现在网络上的博弈论资料大多都是从SG函数开始讲解,而我谜一样的学习方法让我对博弈论初步有了不同的理解过程,所 ...

  3. 组合博弈游戏 - SG函数和SG定理

    转载来自:http://blog.csdn.net/luomingjun12315/article/details/45555495 在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜 ...

  4. 组合游戏 - SG函数和SG定理

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  5. “科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 G 硬币游戏Ⅲ SG函数 /Mutli-SG 游戏 终于补完了……

    这题是Mutli-SG 的变形. 本质还是SG函数. 不考虑算法复杂度来看: 每个局面的SG值等于只有一个硬币的SG值的异或和. 我们这样想:把长度为n的字符串当成n堆石子. 从左往右第i位为1表示第 ...

  6. 剪纸游戏 (SG函数)

    给定一张N*M的矩形网格纸,两名玩家轮流行动. 在每一次行动中,可以任选一张矩形网格纸,沿着某一行或某一列的格线,把它剪成两部分. 首先剪出1*1的格纸的玩家获胜. 两名玩家都采取最优策略行动,求先手 ...

  7. bzoj4600 [Sdoi2016]硬币游戏 sg函数+结论

    sg[maxQ][二的次数][三的次数]=前面的都是正面的胜负状态 C不一样的相互独立 首先顺序是不重要的,因为他有一个模仿关系. 比如   9,3是0    必胜策略是 选9翻9 .3 由于是异或, ...

  8. 博弈论(Nim游戏、有向图游戏之SG函数)

    这里写目录标题 经典NIM游戏 Nim游戏属于公平组合游戏ICG 有向图游戏(SG函数) Mex运算 SG函数 单个有向图(一堆石子) 求SG值(记忆化递归) 有向图游戏的和 ,(多个有向图(多堆石子 ...

  9. [AcWing] 1319.移棋子游戏 博弈论 Sg函数板子题

    题目链接:1319.移棋子游戏 题解 好久没写博弈论的题了,写几道复习一下,博弈论SG主要由两大部分组成:SG函数和SG定理 SG(x)=mex(S),其中S是x的后继状态的SG函数值集合,mex(S ...

最新文章

  1. linux下Yum的$releasever和$basearch的取值
  2. crontab脚本,定时任务相关细节
  3. java concurrentmap原理_Java集合番外篇 -- ConcurrentHashMap底层实现和原理
  4. HDU 1153 magic bitstrings(读题+)
  5. win service 2003 和 win service2008 区别
  6. 近300万记录的论坛还用这个分页存储过程
  7. 使用halcon将一个圆上的点拟合成圆形并且求出圆心
  8. 清空session的方法
  9. Flutter学习笔记(10)--容器组件、图片组件
  10. geetest文件夹什么意思_手机文件夹是英文不敢删?只要找出这5个文件夹,能腾出大量内存...
  11. LeetCode 154. 寻找旋转排序数组中的最小值 II (二分)
  12. [论文阅读] State-Relabeling Adversarial Active Learning
  13. Android:PopupWindow、自定义菜单
  14. dede php判断,织梦视频页面用PHP判断用户访问类型
  15. 在CSDN博客和QQ微信等社交媒体中使用表情符号(保姆级图文+实现代码)【杂记】
  16. 中国通信业:那些年,我们给用户挖的坑
  17. u盘文件或目录损坏且无法读取
  18. Cipher Block chaining
  19. Linux内核源码分析—从用户空间复制数据到内核空间
  20. [PHP面试题]跳槽面试必背-自己最近5年的整理(三)

热门文章

  1. java十六进制大小端转换_字节顺序
  2. 量子计算机设计理念和思路,课程的设计理念与思路
  3. io流图解 java_详细讲解JAVA中的IO流
  4. c语言实现字母转化为unicode码,用C语言实现中文到unicode码的转换
  5. 序列每天从0开始_序列比对(十一)——计算符号序列的全概率
  6. c++tcp接收文件缓存多大合适_网易面经:深剖TCP协议的流量控制和拥塞控制,你懂了吗?...
  7. c语言修改windows系统时间,c语言实现系统时间校正工具代码分享
  8. php拖拽原理,JS拖拽原理
  9. 幂等问题 vs 如何判断是否是4的幂
  10. [蓝桥杯2018初赛]乘积尾零-数论