hdu5715 XOR 游戏 [2016百度之星复赛D题]
比赛的时候没仔细想,赛后一想这题其实挺简单的,先求出序列的异或前缀和,然后将异或前缀和建出一颗trie树,然后我们可以二分答案,把问题变成判定性问题,判定是否存在一种方案,使得所有的分组的异或和都大于等于这个二分的答案,然后就可以dp了,用f[i][j]表示到j为止能不能分成i组,f[i][j]=f[i-1][j-k]|f[i-1][j-k+1]...|f[i-1][j-1],这个东西用trie树维护一下就可以了。单组数据复杂度O(nmlogn^2)
代码
#include<cstdio>
const int N = ;
int num[N],Num[N],trie[N][],tt,sum[N];
int n,m,l,r,i,k,j,a[N],mid;
int flag[][N];
void add(int x,int y)
{
int i;
for (i=;i<=;i++)
num[i]=x&,x>>=;
int t=;
for (i=;i>=;i--)
{
if (trie[t][num[i]]==) trie[t][num[i]]=++tt;
t=trie[t][num[i]];
sum[t]+=y;
}
}
int find(int x,int y)
{
int i;
for (i=;i<=;i++)
{
num[i]=x&,x>>=;
Num[i]=y&,y>>=;
}
int t=;
for (i=;i>=;i--)
{
if (Num[i]==)
{
if (!sum[trie[t][-num[i]]]) return ;
else t=trie[t][-num[i]];
}
else
{
if (sum[trie[t][-num[i]]]) return ;
else if (!sum[trie[t][num[i]]]) return ;
else t=trie[t][num[i]];
}
}
return ;
}
int check(int x)
{
int i,j;
for (i=;i<=m;i++)
for (j=;j<=n;j++)
flag[i][j]=;
flag[][]=;
for (i=;i<=m;i++)
{
for (j=;j<=tt;j++) sum[j]=;
for (j=;j<=n;j++)
{
if (j-k->=)
if (flag[i-][j-k-]) add(a[j-k-],-);
flag[i][j]=find(a[j],x);
if (flag[i-][j]) add(a[j],);
}
}
return flag[m][n];
}
int main()
{
int test;
scanf("%d",&test);
for (int ii=;ii<=test;ii++)
{
for (i=;i<=tt;i++)
trie[i][]=trie[i][]=;
tt=;
scanf("%d%d%d",&n,&m,&k);
for (i=;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]^=a[i-];
}
for (i=;i<=n;i++)
add(a[i],);
l=;r=;
while (l<=r)
{
mid=(l+r)>>;
if (check(mid)) l=mid+;else r=mid-;
}
printf("Case #%d:\n",ii);
printf("%d\n",r);
}
}
hdu5715 XOR 游戏 [2016百度之星复赛D题]的更多相关文章
- hdu5713 K个联通块[2016百度之星复赛B题]
dp 代码 #include<cstdio> ; ; int n,m,k,cnt[N]; ]; ][],i,j,l,a,b; int check(int x,int y) { int i; ...
- hdu5714 拍照[2016百度之星复赛C题]
由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可 ...
- 2016"百度之星" - 复赛(Astar Round3) 1003 拍照
拍照 思路:先静态,离线树状数组,分别统计每个点向左向右能看到的船的数量.再枚举整个区间求最大值. 应为人和船都是动态的,假设船往左走,处理每个点看到向左最大船的数量,满足动态条件.就是向左的船一开始 ...
- 2016百度之星 初赛2A ABEF
只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...
- 2016百度之星 资格赛ABCDE
看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...
- HDU 5690:2016"百度之星" - 初赛 All X
原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU 5688:2016"百度之星" - 资格赛 Problem D
原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5686:2016"百度之星" - 资格赛 Problem B
原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5685:2016"百度之星" - 资格赛 Problem A
原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- tornado 学习笔记7 RequestHandler功能分析
在第5部分讲到,构建一个tornado网站,必须包含一个或者多个handler,这些handler是RequestHandler的子类.每个请求都会被映射到handler中进行处理,处理 ...
- Redis 数据类型总结—String
1.1 数据类型 Redis常用五种数据类型:string, hash, list, set, zset(sorted set). Redis内部使用一个redisObject对象来 ...
- Glyphicon 字体图标
Bootstrap中的Glyphicon 字体图标 在Bootstrap框架中也为大家提供了近200个不同的icon图片,而这些图标都是使用CSS3的@font-face属性配合字体来实现的icon效 ...
- 李洪强iOS经典面试题142-第三方框架及其管理
李洪强iOS经典面试题142-第三方框架及其管理 第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第 ...
- macos开发pgsql数据库
mac安装Postgresql作为数据库 最简单的方式是安装Postgres.App. 这个应用里自带了最新版本的PostgreSQL而且不需要学习数据库服务器启动和关闭的命令.程序安好后(别忘了拖拽 ...
- 01 LabVIEW的类中各个Scope的范围
范例地址: D:\Program Files (x86)\National Instruments\LabVIEW 2015\examples\Object-Oriented Programming\ ...
- lua元表与元方法
lua中提供的元表(metatable)与元方法(metamethod)是一种非常重要的语法,metatable主要用于做一些类似于C++重载操作符式的功能. lua中提供的元表是用于帮助lua变量完 ...
- python学习道路(day3note)(元组,字典 ,集合,字符编码,文件操作)
1.元组()元组跟列表一样,但是不能增删改,能查.元组又叫只读列表2个方法 一个 count 一个 index2.字典{}字典是通过key来寻找value因为这里功能比较多,所以写入了一个Code里面 ...
- 访问API安全性认证设计
1.用户POST登录(账号+密码) | |成功 |2.返回(Private key+时间戳)加密字符串+用户信息+缓存到内存中 | |发起其它请求 |3.发起请求时携带Request参数和(Reque ...
- iPhone的CSS3媒体查询
iPhone的CSS3媒体查询: 各版本的iPhone媒体查询是根据其分辨率和一些CSS3媒体查询的特性来实现媒体查询的...详见下: iPhone6的媒体查询: @media only screen ...