题目的意思是给你n个ai,有多少种不同的连续段使得用该段数中所有的数字玩Nim游戏的先手必胜。

首先根据博弈论的知识,我们知道,要使先手必胜,那么只要保证所有的数的异或值不为0就可以了。

这个题目,给的ai的求法给了我很大的误导,我一开始以为要从哪里入手来突破这个题目。结果。。。。。。。深坑啊。

是这样来考虑的,我们直接模拟,分别得出所有的ai的值,然后用一个数字fi表示a1到ai连续的数的异或值。

这样要求异或不为0的情况,我们只要求出所有值为0的情况,然后将所有的情况减去这些情况就可以了。

对于求所有值为0的情况,有两种可能:

一、f[i]=0,说明从1到i的数所有的数的异或值就为0,这就是一个满足条件的段哦。

二、存在1<=i<j<=n,f[i]=f[j],这说明i+1到j这一段的所有的异或值为0(异或的性质哦),这也是一个满足条件的段。

有了上面的两点,我们就可以进行统计了。

统计有两种方法:

一、排个序,然后对于值相同的两两组合就好了。

二、用map哈希的方法记录每一个数出现了多少种情况,然后组合一下就好了。

 #include <iostream>
#include <cstdio>
#include <map>
#include <algorithm>
#include <cstring>
#define ll long long
#define maxn 100100
using namespace std; int n,m,k,a[maxn],S,W,t;
ll ans,tot; int main()
{
cin>>t;
while (t--)
{
scanf("%d%d%d",&n,&S,&W);
ans=(ll)n*(n+)/,tot=;
int g = S;
for (int i=; i<=n; i++)
{
a[i] = g;
if( a[i] == ) { a[i] = g = W; }
if( g% == ) { g = (g/); }
else { g = (g/) ^ W; }
}
k=;
for (int i=; i<=n; i++)
{
k^=a[i];
a[i]=k;
}
sort(a+,a++n);
k=,a[n+]=a[]=-;
for (int i=; i<=n+; i++)
{
if (a[i]==a[i-]) k++;
else
{
if (a[i-]==) tot+=k;
tot+=(ll)k*(k-)/;
k=;
}
}
printf("%lld\n",ans-tot);
}
return ;
}

ZOJ3591_Nim的更多相关文章

随机推荐

  1. 20155235 2016-2017-1 《Java程序设计》第3周学习总结

    20155235 2016-2017-1 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 类与对象 定义类 使用标准类 对象指定与相等性 基本类型打包器 打包基本类 ...

  2. 微服务(SOP)日志管理

    问题: 大型企业应用规模大,调试 / 解决问题由于在生产环境中不会有开发环境的调试工具,如果需要模拟还原当时的环境, 目前的解决办法是进行日志记录 日志记录的常用方式: 使用SpringAop进行切入 ...

  3. [POI2011]MET-Meteors

    题面 题解 首先我们尝试暴力,那么就对每个点二分一下即可. 我们发现单独二分复杂度太高,而且有些地方很浪费,如求前缀和等. 那么我们就想,能否将它们合并在一起二分呢? 于是就有了整体二分 整体二分即可 ...

  4. 9.15 DP合集水表

    9.15 DP合集水表 显然难了一些啊. 凸多边形的三角剖分 瞄了一眼题解. 和蛤蛤的烦恼一样,裸的区间dp. 设f[i][j]表示i~j的点三角剖分最小代价. 显然\(f[i][i+1]=0,f[i ...

  5. win2012r2 关闭中英文悬浮小方框显示

    因为那是微软输入法自带的   2012下关不掉  所以切换成美式键盘就没有了

  6. javaweb(二十四)——jsp传统标签开发

    一.标签技术的API 1.1.标签技术的API类继承关系 二.标签API简单介绍 2.1.JspTag接口 JspTag接口是所有自定义标签的父接口,它是JSP2.0中新定义的一个标记接口,没有任何属 ...

  7. 六、EnterpriseFrameWork框架基础功能之权限管理

    回<[开源]EnterpriseFrameWork框架系列文章索引> 从本章开始进入框架的第二块内容“EnterpriseFrameWork框架的基础功能”,包括:权限管理.字典数据管理. ...

  8. selenium、unittest——POM框架并出报告

    学习隔壁大神的POM框架,结合自己的用例进行修改整理并执行,操作遇到的主要问题是如何分布的写各个模块并统一运行,每个文件夹想要import里面的模块需要有__init__模块 POM主要分为三个部分, ...

  9. idea compare功能 之一次bug修复

    一次bug修复 最近开发完了一套单点系统,jenkins打包上传到服务器就出问题, 可以启动但是不能正常工作. 首先想到的是环境不一样, 于是把jenkins的jdk和maven都调整和本机大版本相同 ...

  10. 从武侠中的兵器看待数据访问工具——Hibernate Spring.Data Mybatis

    <泪痕剑>第31集,卓爷大谈自己的兵器,我从中摘录,觉得非常受用. “你错了,我们和武器之间的关系,就好像选择情人一样,不管是否擅长,都要用感情. 我少年时候用刀,青年时候仍用刀,不知道用 ...