比赛的时候没仔细想,赛后一想这题其实挺简单的,先求出序列的异或前缀和,然后将异或前缀和建出一颗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题]的更多相关文章

  1. 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; ...

  2. hdu5714 拍照[2016百度之星复赛C题]

    由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可 ...

  3. 2016"百度之星" - 复赛(Astar Round3) 1003 拍照

    拍照 思路:先静态,离线树状数组,分别统计每个点向左向右能看到的船的数量.再枚举整个区间求最大值. 应为人和船都是动态的,假设船往左走,处理每个点看到向左最大船的数量,满足动态条件.就是向左的船一开始 ...

  4. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  5. 2016百度之星 资格赛ABCDE

    看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...

  6. HDU 5690:2016"百度之星" - 初赛 All X

    原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  7. HDU 5688:2016"百度之星" - 资格赛 Problem D

    原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others)    ...

  8. HDU 5686:2016"百度之星" - 资格赛 Problem B

    原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others)    ...

  9. HDU 5685:2016"百度之星" - 资格赛 Problem A

    原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others)    ...

随机推荐

  1. CodeForces445A DZY Loves Chessboard

    A. DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input stand ...

  2. grunt 检测js配置

    module.exports = function(grunt) { // 项目配置 grunt.initConfig({ pkg: grunt.file.readJSON('package.json ...

  3. Django分析之使用redis缓存服务器

    时间长没有更新了,这段时间一直忙着一个项目,今天就记录一个现在经常会用到的技术吧. redis相信大家都很熟悉了,和memcached一样是一个高性能的key-value数据库,至于什么是缓存服务器, ...

  4. Windows 7您的凭据不工作

    假设计算机A要远程连接到计算机B 一.参考链接 http://jingyan.baidu.com/article/148a1921a807d34d70c3b143.html 在计算机B上操作 快捷键 ...

  5. Python之路第一课Day1--随堂笔记

    课堂大纲: 一.Python介绍 二.发展史 三.Python 2 or 3? 四.安装 五.Hello World程序 六.变量 七.用户输入 八.模块初识 九..pyc是个什么鬼? 十.数据类型初 ...

  6. 07@Pattern_Note_LabVIEW工厂模式理解

    前言 折腾了一天,基本上搞清楚了简单工厂.工厂模式 理解 无论是简单工厂还是工厂模式,都有一个特点,即工厂加工的方式是不变的,产品的类型可以不断扩展:如果加工方式也会变化,修改工厂模式的加工方式会导致 ...

  7. ssh项目部署到weblogic中问题总结

    部署到weblogic还是比较费劲的 ,不过基本上问题全是由于classloader顺序的问题引起的. 首先在web-inf底下添加weblogic.xml文件如下 <?xml version= ...

  8. 第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷

    首先,“银弹”在百度百科中的解释是银色的子弹,我们更熟知的“银弹”一词,应该是在<人月神话>中提到的.银弹原本应该是指某种策略.技术或者技巧可以极大地提高程序员的生产力[1].此题目中关于 ...

  9. Linux下安装Git

    Ubuntu12.04中默认没有安装Git.需要自行安装. 1. 安装Git 1.1 Ubuntu12.04下 可以使用apt-get方式安装,也可以下载源代码安装[1],我们这里使用apt-git安 ...

  10. Invoke-Command和-ComputerName 效率比较

    看到网上有文章说Invoke-Command的方式相较其他方式的效率要高,特地试验了一下,但是这个实验不是很好: 机器只有2台 0. 用Get-WinEvent,日志数=200,Invoke方式快 1 ...