ZOJ 3591 Nim (NIM博弈+统计
转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
题目:按照某种规律生成一个序列,选中某段连续的序列玩NIM游戏,先手能必胜的有多少种。
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4675
乍一看毫无头绪啊。序列貌似会形成循环,可是数量如此之大。
先按照规则生成序列。保存前i个堆的异或值,存在nim[i]。
如果想要必胜,是选中连续的数异或不为0,如果存在nim[i]==nim[j]则表示i+1,i+2……j的异或值0,则是一组必败的局面。
这样我们便想到从对立而考虑,总共的选择是n*(n+1)/2。
将nim排序,找出相同 的nim值有多少个,便可以统计出有多少必败的局面。
同时注意nim[i]为0的话,现在从1----i便是必败局面,也要减掉。
另外注意int溢出
#include<iostream>
#include<cstdio>
#include<ctime>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<vector>
#define C 240
#define TIME 10
#define inf 1<<25
#define LL long long
using namespace std;
int a[100005],nim[100005];
int main(){int t,n,s,w;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&s,&w);int g=s,ret=0;for(int i=0;i<n;i++){a[i]=g;if(a[i]==0) a[i]=g=w;if(g%2==0) g/=2;else g=(g/2)^w;ret^=a[i];nim[i]=ret;}sort(nim,nim+n);LL sum=(LL)n*(n+1)/2;int len=1;for(int i=1;i<n;i++){if(nim[i]==nim[i-1])len++;else{if(nim[i-1]==0)sum-=len;sum-=(LL)len*(len-1)/2;len=1;}}sum-=(LL)len*(len-1)/2;printf("%lld\n",sum);}return 0;
}
ZOJ 3591 Nim (NIM博弈+统计相关推荐
- 【ZOJ - 3591】Nim(博弈问题,思维,STLmap)
题干: Nim is a mathematical game of strategy in which two players take turns removing objects from dis ...
- ZOJ - 3591 NIM
ZOJ - 3591 NIM 题目大意:给你n,s,w和代码,能生成长度为n的序列,问异或和不为0的子序列有多少个? 这是个挂羊头卖狗肉的题,和NIM博弈的关系就是要异或和不为0,一开始以博弈甚至循环 ...
- Poj1704:staircase nim【博弈】
题目大意:有一个无限长的一维的棋盘,棋盘上N个格子放置着棋子.两个人轮流操作,每次操作能选择其中一个棋子向左移动,但不能越过其它棋子或者两枚棋子放在同一格中,最后不能操作的人算输,问先手是否必胜? 思 ...
- (转载)Nim游戏博弈(收集完全版)
Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为"拈(Nim) ...
- 【小组专题二:博弈论入门综述(1)】NP状态 | SG函数 | 巴什博奕、威佐夫博弈、斐波那契博弈、Nim游戏、SJ定理
博弈论综述[1] 前言 博弈与博弈论 博弈树 NP状态 SG函数(Sprague-Grundy) Sprague-Grundy Theorem 巴什博奕 Bash Game 威佐夫博弈 扩展威佐夫博弈 ...
- poj 2234 博弈-Nim
(转载)Nim游戏博弈(收集完全版) Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到 ...
- LightOJ-1253 Misere Nim
LightOJ-1253 Misere Nim nim博弈的变形. 和一般nim博弈的区别:最后一个取石子的lose,输出win的人. 还是亦或求解, 只要特判全是1的情况. #include < ...
- VB6 调用 Nim 生成的 DLL
2019独角兽企业重金招聘Python工程师标准>>> 关于 Nim Nim 是德国人 开发的编程语言,最初叫 Nimrod.Nim 有下面几个特点: 强制缩进语法 AST 操控 编 ...
- 【学习笔记】平等博弈及常见的公平博弈类型
文章目录 平等博弈 nim堆 SG定理 nim和 常见的公平博弈模型 bash博弈 nim博弈 nim-k博弈 wythoff博弈 扩展wythoff博弈 fibonacci博弈 阶梯博弈 green ...
最新文章
- 封装、继承、多态、访问符,范围修饰符
- [Android]手动触发OnClick事件
- c#截取字符串后几位_基础库的字符串设计
- centos7 防火墙_Linux系统安全Centos 7的Firewalld防火墙基础
- 最短路径问题总结,时间复杂度,空间复杂度对比(JAVA)
- oracle dba create view 失败 解决办法
- 程序员去交友网站找女友,结果意外了...
- 基于FPGA的简易DDS信号发生器的设计与验证
- Java String的内存机制
- Django框架orm
- 微信朋友圈点赞生成器
- DSI3协议 CRM模式通信讲解
- 大学十年(一个程序员的路程)
- XPath之电影天堂数据爬取
- 快速构建栅格地图-MatLab
- [转]老师几乎气绝身亡,搞笑....
- 【智能商务】学习财务分析,看这10张思维导图就够啦
- UG 二次开发中文帮助文档,UFun在线帮助文档, NX API 中文帮助文档
- 补鞋匠迈尔鲁夫的故事(二)
- ssm毕设项目企业部门报销管理g9d62(java+VUE+Mybatis+Maven+Mysql+sprnig)