ZOJ - 3591 NIM
ZOJ - 3591 NIM
题目大意:给你n,s,w和代码,能生成长度为n的序列,问异或和不为0的子序列有多少个?
这是个挂羊头卖狗肉的题,和NIM博弈的关系就是要异或和不为0,一开始以博弈甚至循环节的去想这题,完全跑偏了。其实主要还是一个异或和,我们看一组数2 3 2 3 2 3 2,我们像前缀和一样去处理
数 2 3 2 3 2 3 3
异或和 2 1 3 0 2 1 2
位置 1 2 3 4 5 6 7
我们可以发现位置1到位置5的异或结果是一样的都是2,这能说明什么呢,说明位置1到位置4的异或结果为0,位置4的异或和就是0,这很明显。再来看位置2到位置6的他们异或结果都是1,为什么呢?因为位置2到位置5的异或结果0,中间的异或结果为0,所以从位置2到位置6的异或结果才会相同。我们来看异或和结果一样的位置1,5,7,可以发现它们异或和相等,然后和位置已经没有太大关系,因为异或和相同,说明两个位置中间的异或结果为0。那每两个相同异或和结果的位置就决定了一个为0的子序列。所以我们只需要排个序,然后统计相同异或和的长度len,然后两两组合就是len*(len-1)/2个序列为0,我们只要用总结果n*(n+1)/2减去这个组合的个数就可以得到答案了,还有就是异或和已经等于0的位置就像上面的位置4,他们相当于从位置0(最初)到当前位置的序列,这也要减去。详情见代码。
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define ll long long 5 const int N=101108; 6 ll n,s,w,a[N],sum[N]; 7 void init() 8 { 9 ll g=s; 10 sum[0]=0; 11 for (int i=1;i<=n;i++) 12 { 13 a[i]=g; 14 sum[i]=sum[i-1]^a[i];//前缀异或和 15 if(a[i]==0) 16 a[i]=g=w; 17 if(g%2==0) 18 g=g/2; 19 else 20 g=(g/2)^w; 21 } 22 sum[n+1]=-1;//为了把最后的也统计上,加上个终止条件 23 } 24 int main() 25 { 26 int t; 27 scanf("%d",&t); 28 while(t--) 29 { 30 scanf("%lld%lld%lld",&n,&s,&w); 31 init(); 32 sort(sum+1,sum+1+n);//把前缀异或和排个序,使相同的在连续区间 33 ll ans=n*(n+1)/2; 34 for(ll i=1,j=1;i<=n+1;i++) 35 { 36 if(sum[i]==0)//已经是0了减去 37 ans--; 38 if(i>1&&sum[i]!=sum[i-1])//减去中间相同区间的组合 39 { 40 ans-=(i-j)*(i-j-1)/2; 41 j=i; 42 } 43 } 44 printf("%lld\n",ans); 45 } 46 return 0; 47 }
前前后后
这题给了我一个很好的启发,也是在敲板子套模板多了之后给我提了个思考,要变通,要去思考问题。
转载于:https://www.cnblogs.com/LMCC1108/p/10526848.html
ZOJ - 3591 NIM相关推荐
- ZOJ 3591 Nim (NIM博弈+统计
转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题目:按照某种规律生成一个序列,选 ...
- 【ZOJ - 3591】Nim(博弈问题,思维,STLmap)
题干: Nim is a mathematical game of strategy in which two players take turns removing objects from dis ...
- ZOJ 3964 NIM变形
LINK 题意:n堆石子,Alice 和 Bob 轮流取石子,谁不能再取或被对方取完为败.但是对于alice拥有限制:b=0此堆正常无限制:b=1此堆Alice只能取奇数个石子:b=2只能取偶数个石子 ...
- POJ ZOJ题目分类
POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...
- POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)
水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法: (1)枚举 (1753,2965) (2)贪心(13 ...
- zoj 3964 - Yet Another Game of Stones
zoj 3964 - Yet Another Game of Stones // 2017zjpc 传送门 题意: 有n堆石子,每堆有一个限制0,1,2,限制只对Alice生效,分别表示没有限制,只能 ...
- ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!
两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...
- zoj 1204 Additive equations
ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...
- 【bzoj3150】 cqoi2013—新Nim游戏
www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...
最新文章
- python3 中 is, is not ,==, != 的区别
- A级计算机考试试题,计算机等级考试一级试题及答案-计算机a级试题
- 工具栏,状态栏(VC_MFC)
- 视频智能去水印:从数学建模到工程实现
- 有关 Oracle redo log
- windows安装python2
- java如何引用类_java – 如何引用当前类的类?
- OpenShift 4 - DevSecOps Workshop (7) - 为Pipeline增加向Nexus制品库推送任务
- (三)用于构建AI语言翻译系统的工具
- 轻松实现SQL异地备份
- 全新的Windows Phone 8开发资源汇总
- 关于网上商城开发的随笔记录1
- cocos2d-x学习之旅(二):1.2 cocos2d-x Visual Studio2010 开发环境搭建 windows 7 32位
- vue项目实现pc端适配
- WPF Effect (一)
- 基于openGauss的五子棋AI项目
- C语言排序之冒泡法(起泡法)
- 【不懂就问】互联网、因特网和万维网到底是什么
- 清华脑机接口需要学计算机专业的吗,清华大学
- 个税继续教育证书有哪些 计算机,个税继续教育包括函授吗 个人所得税的继续教育主要包括哪些...