https://scut.online/p/290

一个 N 个数的取数游戏,Kaildls 和 Parco 轮流操作,每次操作从 N 个数中取一个数 y 并把他变成 y-x(满足 x | y 且x < y),无法操作的人输。

假设 Kaildls 先手且两人都是用最优策略,请问最后谁会赢?

第一次学SG函数,要找的是每次能从石子堆中取走的数目,记录下来。

最后的Nim和为0是后手赢?

#include<bits/stdc++.h>
using namespace std;
#define ll long long #define MAXN 1000005
#define N 1000005 //f[N]:可改变当前状态的方式,N为方式的种类,f[N]要在getSG之前先预处理
//SG[]:0~n的SG函数值
//S[]:为x后继状态的集合
vector<int> nextofSG[MAXN];
int f[N],SG[MAXN],S[MAXN];
void getSG(int n){
for(int i = ; i <= n; i++){
int l=nextofSG[i].size();
//后继状态 最多有l 种
for(int j=;j<=l;j++){
S[j]=;
}
for(auto vi:nextofSG[i]){
//vi:从i状态能取走的石子数
S[SG[i-vi]]=;
}
for(int j=;j<=l;j++){
if(!S[j]){
SG[i] = j;
break;
}
}
//cout<<"SG["<<i<<"]="<<SG[i]<<endl;
} } int a[]; unsigned generateai(unsigned &n,unsigned &x,unsigned &y, unsigned &z){
x=x^(x<<);
x=x^(x>>);
x=x^(x<<);
x=x^(x>>);
unsigned w=x^(y^z);
x=y;
y=z;
z=w;
return z;
} int main(){
unsigned n,x,y,z;
for(int i=;i<=;i++){
for(int j=i+i;j<=;j+=i){
nextofSG[j].push_back(i);
}
}
getSG();
for(int t=;t<;t++){
cin>>n>>x>>y>>z;
int sumSG=;
for(int i=;i<n;i++){
a[i]=generateai(n,x,y,z)%n+;
//cout<<a[i]<<endl;
sumSG^=SG[a[i]];
}
//cout<<"!"<<sumSG<<endl;
if(sumSG==)
cout<<"Parco"<<endl;
else{
cout<<"Kaildls"<<endl;
}
}
}

SCUT - 290 - PARCO的因数游戏 - 博弈论的更多相关文章

  1. POJ.1067 取石子游戏 (博弈论 威佐夫博弈)

    POJ.1067 取石子游戏 (博弈论 威佐夫博弈) 题意分析 简单的威佐夫博弈 博弈论快速入门 代码总览 #include <cstdio> #include <cmath> ...

  2. HDU.2516 取石子游戏 (博弈论 斐波那契博弈)

    HDU.2516 取石子游戏 (博弈论 斐波那契博弈) 题意分析 简单的斐波那契博弈 博弈论快速入门 代码总览 #include <bits/stdc++.h> #define nmax ...

  3. 【Foreign】石子游戏 [博弈论]

    石子游戏 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output 输出T行,表示每组的答案. Sample Input 3 ...

  4. BZOJ 1022 Luogu P4279 [SHOI2008]小约翰的游戏 (博弈论)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1022 (luogu) https://www.luogu.org/pro ...

  5. Day1T1仓鼠的石子游戏——博弈论

    打比赛的时候还没学博弈论,打完下来花了半个多小时学完,发现这题就是一道\(SG\)函数 其实当时差一点就\(YY\)出了答案,但是后面太难想,所以没整出来 机房大佬们都说自己没学博弈论,但是都AC 题 ...

  6. NOIP2010pj三国游戏[博弈论]

    题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...

  7. bzoj1188 [HNOI2007]分裂游戏 博弈论 sg函数的应用

    1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 973  Solved: 599[Submit][Status ...

  8. BZOJ3105: [cqoi2013]新Nim游戏 博弈论+线性基

    一个原来写的题. 既然最后是nim游戏,且玩家是先手,则希望第二回合结束后是一个异或和不为0的局面,这样才能必胜. 所以思考一下我们要在第一回合留下线性基 然后就是求线性基,因为要取走的最少,所以排一 ...

  9. hdu 2516 取石子游戏 博弈论

    很显然的nim游戏的变形,很好找规律 先手败:2,3,5,8,13…… 其他先手胜.即满足菲波拉数列. 代码如下: #include<iostream> #include<stdio ...

随机推荐

  1. 转:CEO, CFO, CIO, CTO, CSO是什么

    转自:https://club.1688.com/threadview/26957122.html CEO, CFO, CIO, CTO, CSO是什么?(现在O太多了) 帖子创建时间:  2009年 ...

  2. webpack4.0入门以及使用

    1. 安装webpack 先新建一个文件夹(demos),然后 npm init -y 新建一个package.json然后在当前目录执行webpack命令 webpack 模块未发现或者未找到src ...

  3. JavaScript - 正则表达式解惑

    正则表达式手册: http://tool.oschina.net/uploads/apidocs/jquery/regexp.html 正则表达式测试地址: http://tool.chinaz.co ...

  4. Android的Message Pool是个什么鬼,Message Pool会否引起OOM——源代码角度分析

    引言 Android中,我们在线程之间通信传递通常採用Android的消息机制,而这机制传递的正是Message. 通常.我们使用Message.obtain()和Handler.obtainMess ...

  5. FragmentSharedFabTransition

    https://github.com/lgvalle/FragmentSharedFabTransition

  6. Arcgis Engine(ae)接口详解(7):地图(map)操作

    IMap map = null; //跟map同一层次的activeView对象,他们都是“地图”的对象,map管理地图内容,activeView管理显示内容 IActiveView activeVi ...

  7. MFC 的 Picture Control 加载 BMP/PNG 图片的方法

    1. 加载 BMP CStatic* pWnd = (CStatic*)GetDlgItem(IDC_PIC); // 得到 Picture Control 句柄 pWnd->ModifySty ...

  8. sanic官方文档解析之Custom Protocols(自定义协议)和Socket(网络套接字)

    1,Custom Protocol:自定义协议 温馨提示:自定义协议是一个高级用法,大多数的读者不需要用到此功能 通过特殊的自定义协议,你可以改变sanic的协议,自定义协议需要继承子类asyncio ...

  9. 在安卓6.0(及以上)设备上无法获取无线网卡MAC地址的解决方案

    在安卓6.0以下的设备上,通过WifiManager.getConnectionInfo().getMacAddress()即可获取WLAN物理地址, 而在6.0及以上,以此方式获取到的MAC地址为固 ...

  10. 在线安装Ganglia3.6.0,nginx+php搭建gweb,绝对通过

    环境:CentOS6.5 minimal 目标:安装Ganglia核心组件(gmond, gmetad, gmetric, gstat, libganglia).Ganglia web 准备 yum增 ...