ZOJ3591_Nim
题目的意思是给你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的更多相关文章
随机推荐
- 简单的Slony-I设置实例 II
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页 接前面例子, 简单的Slony-I设置实例 这次我 ...
- 如何注册Uber司机(全国版最新最详细注册流程)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://didi-uber.com/archiv ...
- c# IE浏览器清除缓存没用
再想买更新JS和css文件之后, 使用 internet 里面的删除选项 发现样式和事件还是没用变 最终发现 需要 按 f12 找到这个清缓存才正常解决问题
- The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are: A-Z, a-z, 0-9, dash, period, underscore, but the name cannot start with a dash, period, or underscore
The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are: A-Z ...
- leetcode个人题解——#40 Combination Sum2
思路:解法和39题类似,改动了两处: 1.因为题目要求每个元素只能出现一次(不代表每个数只能有一个,因为数据中会有重复的数字),所以代码中21行搜索时下一次循环的位置+1: 2.将临时存放答案的vec ...
- 使用appcmd命令创建iis站点及应用程序池
参考文章:iis7 appcmd的基础命令及简单用法 验证环境:Windows 7 IIS7 AppCmd.exe工具所在目录 C:\windows\sytstem32\inetsrv\目录下, ...
- 学霸系统UI部分功能规格说明书
发布人员:软件工程实践小队 发布内容:学霸系统UI部分功能规格说明书 版本:学霸V1.1版本 ◆Part 1:引言 1.1目的 本功能规格说明书的目的在于明确 ...
- Ubuntu16.04下安装显卡驱动记录
安装环境及硬件信息 Ubuntu16.04 LTS 内核版本:4.4.0 显卡:Nvidia GeForce GTX 1060 安装过程 一.首先要下载好显卡驱动程序,官方网址:http://www. ...
- 2018软工实践—Alpha冲刺(9)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...
- 福大软工·第十一次作业-Alpha事后诸葛亮
福大软工·第十一次作业-Alpha事后诸葛亮 组长博客链接 本次作业博客链接 项目Postmortem 模板 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...