ZOJ3591 Nim
来源:互联网 发布:linux下编译qt5.7源码 编辑:程序博客网 时间:2024/05/29 02:53
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4675
大意:根据题目中给的函数生成一串正整数作为若干石子堆的个数,然后选取若干连续的石子堆玩NIM游戏,求有多少种选法使得先手必胜。
要求被选中的这若干个连续的数字异或为1,也就是说,Cn,2减去某段异或为0的情况个数即为答案。用b[i]表示从a[1]到a[i]的异或结果,则若b[j]=b[k],则a[j+1]到a[k]的异或结果必为0。将计算好的b数组排序,然后处理值相同的部分。
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<vector>#include<algorithm>#include<map>using namespace std;#define N 100005int a[N],b[N];int main(){ //freopen("a","r",stdin); int t,i; long long n,s,w,sum,sum1; cin>>t; for (int k=1;k<=t;k++) { cin>>n>>s>>w; sum=0; sum1=0; int g = s; for (i=1; i<=n; i++) { a[i] = g; if( a[i] == 0 ) a[i] = g = w; if( g%2 == 0 ) g = (g/2); else g = (g/2) ^ w; } b[1]=a[1]; for (i=2;i<=n;i++) { b[i]=b[i-1]^a[i]; if (b[i]==0) sum1++; } sort(b+1,b+n+1); int m=1; for (i=2;i<=n;i++) { if (b[i]==b[i-1]) m++; else { sum1+=(m-1)*m/2; m=1; } } sum1+=(m-1)*m/2;//处理一下最后几个相同的元素 sum=(n+1)*n/2-sum1; printf("%lld\n",sum); } return 0;}
- ZOJ3591 Nim
- zoj3591 Nim
- [ZOJ3591] Nim && 博弈+计数
- zoj3591 Nim-----位运算 博弈
- nim
- Nim
- Nim
- Nim
- (博弈Nim)Nim
- POJ_2975 Nim(Nim)
- Nim游戏 Nim Game
- nim游戏
- [poj2975]Nim
- Nim游戏
- nim 博弈
- NIM游戏
- 1.11 nim
- Nim游戏
- 窗体两个按钮各占一半
- GXT客户端Message&ToolTip封装类
- 基于 android TV的智能家居项目的传感器浅谈(1)
- WP7 ApplicaitionBar 笔记
- 逻辑运算符与位运算符的重要区别
- ZOJ3591 Nim
- 开通博客
- 杭电hdu 1730 Northcott Game 博弈
- RHEL5下Oracle10g的卸载与重新安装
- TI C64X DSP中断向量表的配置实现总结
- 很特别的一个动态规划入门教程
- Finding alert.log file in 11g [ID 438148.1]
- 《中小型IT环境如何实施ITIL流程》(录音下载)
- gzip, gunzip ,tar命令