POJ 3553 Light Switching Game 博弈论 nim积 sg函数
http://poj.org/problem?id=3533
变成三维的nim积。。前面hdu那个算二维nim积的题的函数都不用改,多nim积一次就过了。。。longlong似乎不必要但是还是加上了
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<map>
#include<ctime>
using namespace std;
long long n;
long long sg[][]={};
long long f(long long,long long);
long long g(long long x,long long y){
if(sg[x][y]!=-)return sg[x][y];
if(!x)return sg[x][y]=<<y;
if(!y)return sg[x][y]=<<x;
long long ans=,k=,t;
long long x1=x,y1=y;
while(x||y){
t=<<k;
if((x^y)&){
ans*=t;
}
x>>=;y>>=;k<<=;
}
k=;x=x1;y=y1;
while(x||y){
t=<<k;
if((x&y)&){
ans=f(ans,t/*);
}
x>>=;y>>=;k<<=;
}return sg[x1][y1]=ans;
}
long long f(long long x,long long y){
if(!x||!y)return ;
if(x==)return y;
if(y==)return x;
long long ans=;
for(long long i=x,a=;i;i>>=,a++){
if(!(i&))continue;
for(long long j=y,b=;j;j>>=,b++){
if(!(j&))continue;
ans^=g(a,b);
}
}return ans;
}
int main(){
memset(sg,-,sizeof(sg));
while(~scanf("%lld",&n)){
long long ans=,x,y,z;
for(long long i=;i<=n;i++){
scanf("%lld%lld%lld",&x,&y,&z);
ans^=f(z,f(x,y));
}
if(ans)printf("No\n");
else printf("Yes\n");
}
return ;
}
POJ 3553 Light Switching Game 博弈论 nim积 sg函数的更多相关文章
- 博弈论基础之sg函数与nim
在算法竞赛中,博弈论题目往往是以icg.通俗的说就是两人交替操作,每步都各自合法,合法性与选手无关,只与游戏有关.往往我们需要求解在某一个游戏或几个游戏中的某个状态下,先手或后手谁会胜利的问题.就比如 ...
- POJ 3533 Light Switching Game(三维Nim积)题解
思路:三维Nim积 代码: #include<set> #include<map> #include<stack> #include<cmath> #i ...
- HDU 3404 Switch lights 博弈论 nim积
http://acm.hdu.edu.cn/showproblem.php?pid=3404 题目 http://www.doc88.com/p-5098170314707.html 论文 nim积在 ...
- 博弈论进阶之SG函数
SG函数 个人理解:SG函数是人们在研究博弈论的道路上迈出的重要一步,它把许多杂乱无章的博弈游戏通过某种规则结合在了一起,使得一类普遍的博弈问题得到了解决. 从SG函数开始,我们不再是单纯的同过找规律 ...
- 博弈论初步(SG函数)
讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用. 学习求解SG ...
- hdu 5795 A Simple Nim 博弈sg函数
A Simple Nim Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pro ...
- HDU 3032 Nim or not Nim? (sg函数)
Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- POJ.1704.Georgia and Bob(博弈论 Nim)
题目链接 \(Description\) 一个1~INF的坐标轴上有n个棋子,给定坐标Pi.棋子只能向左走,不能跨越棋子,且不能越界(<1).两人每次可以将任意一个可移动的棋子向左移动一个单位. ...
- POJ 2311 Cutting Game(Nim博弈-sg函数/记忆化搜索)
Cutting Game 题意: 有一张被分成 w*h 的格子的长方形纸张,两人轮流沿着格子的边界水平或垂直切割,将纸张分割成两部分.切割了n次之后就得到了n+1张纸,每次都可以选择切得的某一张纸再进 ...
随机推荐
- 伪ajax操作
什么是伪Ajax操作? 说白了就是假的ajax操作,但是它和正常的ajax操作的目的是一样的,把前端的信息发送到后台 先看一下代码吧! ajax.html <form action=" ...
- jq时间日期插件的使用-datetimepicker
分三步 首先引入各种包 然后搞哥容器用id 然后加入一段js 实例: 下载:http://files.cnblogs.com/files/wordblog/datetimepicker-maste ...
- C++类型转换 -- 由其他类型转换到自定义类型
由其他类型转换到自定义类型 由其他类型(如int,double)向自定义类的转换是由构造函数来实现,只有当类的定义和实现中提供了合适的构造函数,转换才能通过. /******************* ...
- perl6正则 4: before / after 代码断言: <?{}> / <!{}>
<?before> <? befor XXX> 某字符在 xxx 之前 <?after > <?after XXX> 某字符之后有XXX 对应的取反分别 ...
- Python3 动态导入模块的两种方式
动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块 需要导入的模块: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:C ...
- Linux下查看进程占用内存的最好方式
今天看到stackoverflow上关于linux下如何查看某个进程占用的内存是多少的回答,觉得非常棒,不过是全英文的,很多人可能看不懂,所以我翻译一下 翻译自http://stackoverflow ...
- HZ与Jiffies
2.4 内核定时器 内核中许多部分的工作都高度依赖于时间信息.Linux内核利用硬件提供的不同的定时器以支持忙等待或睡眠等待等时间相关的服务.忙等待时,CPU 会不断运转.但是睡眠等待时,进程将放弃C ...
- idea关于断点的补充
黑背景版: 先编译好要调试的程序.1.设置断点
- log4j生成日志
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可 ...
- JavaScript 兼容性总结
请实现鼠标点击任意标签,alert该标签的名称(注意兼容性) function elementName(evt){ evt = evt|| window.event; var selected = ...