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相关推荐

  1. ZOJ 3591 Nim (NIM博弈+统计

    转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 题目:按照某种规律生成一个序列,选 ...

  2. 【ZOJ - 3591】Nim(博弈问题,思维,STLmap)

    题干: Nim is a mathematical game of strategy in which two players take turns removing objects from dis ...

  3. ZOJ 3964 NIM变形

    LINK 题意:n堆石子,Alice 和 Bob 轮流取石子,谁不能再取或被对方取完为败.但是对于alice拥有限制:b=0此堆正常无限制:b=1此堆Alice只能取奇数个石子:b=2只能取偶数个石子 ...

  4. POJ ZOJ题目分类

    POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...

  5. POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)

    水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法:        (1)枚举 (1753,2965)       (2)贪心(13 ...

  6. zoj 3964 - Yet Another Game of Stones

    zoj 3964 - Yet Another Game of Stones // 2017zjpc 传送门 题意: 有n堆石子,每堆有一个限制0,1,2,限制只对Alice生效,分别表示没有限制,只能 ...

  7. ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!

    两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...

  8. zoj 1204 Additive equations

    ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...

  9. 【bzoj3150】 cqoi2013—新Nim游戏

    www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...

最新文章

  1. python3 中 is, is not ,==, != 的区别
  2. A级计算机考试试题,计算机等级考试一级试题及答案-计算机a级试题
  3. 工具栏,状态栏(VC_MFC)
  4. 视频智能去水印:从数学建模到工程实现
  5. 有关 Oracle redo log
  6. windows安装python2
  7. java如何引用类_java – 如何引用当前类的类?
  8. OpenShift 4 - DevSecOps Workshop (7) - 为Pipeline增加向Nexus制品库推送任务
  9. (三)用于构建AI语言翻译系统的工具
  10. 轻松实现SQL异地备份
  11. 全新的Windows Phone 8开发资源汇总
  12. 关于网上商城开发的随笔记录1
  13. cocos2d-x学习之旅(二):1.2 cocos2d-x Visual Studio2010 开发环境搭建 windows 7 32位
  14. vue项目实现pc端适配
  15. WPF Effect (一)
  16. 基于openGauss的五子棋AI项目
  17. C语言排序之冒泡法(起泡法)
  18. 【不懂就问】互联网、因特网和万维网到底是什么
  19. 清华脑机接口需要学计算机专业的吗,清华大学
  20. 个税继续教育证书有哪些 计算机,个税继续教育包括函授吗 个人所得税的继续教育主要包括哪些...

热门文章

  1. 初学者应该如何有效率的系统学习Python开发
  2. 行业大牛都是同时掌握游戏建模和游戏原画的吗?
  3. Google research 一行预处理代码,让你的CV模型更强!
  4. 史上最快的Transformer!新模型达成最低时间复杂度
  5. 神经网络“炼丹炉”内部构造?牛津大学博士小姐姐用论文解读
  6. 147页详述「结构在神经网络中的复兴」,图注意力网络一作博士论文公开
  7. 0元包邮 | 多传感器融合感知知识导图
  8. 推荐系统遇上深度学习(八)--AFM模型理论和实践
  9. 自然语言处理之基于biLSTM的pytorch立场检测实现
  10. 决策树会有哪些特性?