当时Astar复赛的时候只做出1题,赛后补题(很长时间后才补,懒真是要命),发现这是第二简单的

分析:

这个题,可以每次二分区间的最小异或和

进行check的时候用dp进行判断,dp[i][j]代表前i个元素分成j个区间,j是最后一个区间的最后一个元素

如果dp[i][j]为真,表明每个区间长度大于L,异或和大于mid

否则为假

返回dp[n][m]就好

复杂度度 O(30^2*nm)

吐槽:和异或相关的题总是和字典树贪心有关,又是一道,铭记铭记

#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
const int N = 1e4+;
typedef long long LL;
int n,m,l,T,cas,tot;
int a[N];
struct Node{
int sum,nex[];
}p[N**];
int newnode(){
++tot;
p[tot].sum=;p[tot].nex[]=p[tot].nex[]=-;
return tot;
}
int root[];
void add(int pos,int x){
int now=root[pos],cur;
++p[now].sum;
for(int i=;i>=;--i){
if(x&(<<i))cur=;
else cur=;
if(p[now].nex[cur]==-)
p[now].nex[cur]=newnode();
now=p[now].nex[cur];
++p[now].sum;
}
}
void del(int pos,int x){
int now=root[pos],cur;
--p[now].sum;
for(int i=;i>=;--i){
if(x&(<<i))cur=;
else cur=;
now=p[now].nex[cur];
--p[now].sum;
}
}
int query(int pos,int x){
int now=root[pos],ret=,cur;
if(p[now].sum==)return ;
for(int i=;i>=;--i){
if(x&(<<i))cur=;
else cur=;
if(p[now].nex[cur^]!=-&&p[p[now].nex[cur^]].sum!=){
ret+=(<<i);
now=p[now].nex[cur^];
}
else now=p[now].nex[cur];
}
return ret;
}
bool dp[N][];
bool check(int mid){
tot=;
for(int i=;i<m;++i)
root[i]=newnode();
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)dp[i][j]=false;
dp[][]=true;add(,);
for(int i=;i<=n;++i){
if(i-l->=){
for(int j=;j<=m;++j)
if(dp[i-l-][j])del(j,a[i-l-]);
}
for(int j=;j<=m;++j){
int tmp=query(j-,a[i]);
if(tmp>=mid)add(j,a[i]),dp[i][j]=true;
}
} return dp[n][m];
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&l);
for(int i=;i<=n;++i)
scanf("%d",&a[i]),a[i]^=a[i-];
int l=,r=1e9+,ret;
while(l<=r){
int mid=(l+r)>>;
if(check(mid))l=mid+,ret=mid;
else r=mid-;
}
printf("Case #%d:\n%d\n",++cas,ret);
}
return ;
}

HDU5715 XOR 游戏 二分+字典树+dp的更多相关文章

  1. HDU 5715 XOR 游戏 二分+字典树

    XOR 游戏 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5715 Description 众所周知,度度熊喜欢XOR运算(XOR百科). 今天,它 ...

  2. Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp

    C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...

  3. UVALive 3942 Remember the Word 字典树+dp

    /** 题目:UVALive 3942 Remember the Word 链接:https://vjudge.net/problem/UVALive-3942 题意:给定一个字符串(长度最多3e5) ...

  4. Codeforces Round #311 (Div. 2) E - Ann and Half-Palindrome(字典树+dp)

    E. Ann and Half-Palindrome time limit per test 1.5 seconds memory limit per test 512 megabytes input ...

  5. HDU4825 Xor Sum(字典树解决最大异或问题)

    Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整 ...

  6. LA 3942 - Remember the Word (字典树 + dp)

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  7. CF456D A Lot of Games (字典树+DP)

    D - A Lot of Games CF#260 Div2 D题 CF#260 Div1 B题 Codeforces Round #260 CF455B D. A Lot of Games time ...

  8. HDU--5269 ZYB loves Xor I (字典树)

    题目电波: HDU--5269 ZYB loves Xor I 首先我们先解决 ai xor aj 每个数转化为二进制  我们用字典树统计 每个节点 0 和 1 的出现的个数 #include< ...

  9. BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)

    <题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0, ...

随机推荐

  1. SDUT1061Binomial Showdown(组合数)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1061 题意 : 表示这个题的英文没看懂,就看懂 ...

  2. Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)

    1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...

  3. java使用Apache POI操作excel文件

    官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...

  4. hdu 4465 Candy

    题解: 由题意得 需要运用: C(m,n)=exp(logC(m,n)) f[]=; ; i<=; i++) f[i]=f[i-]+log(i*1.0); double logC(int m,i ...

  5. XML DOS 攻击

    内容来自此文:http://msdn.microsoft.com/en-us/magazine/ee335713.aspx DoS(Denial of service:拒绝服务)攻击由来已久(1992 ...

  6. jdbc的通讯录CRUD

    基于JDBC的通讯录练手:项目以MVC模式开发,包名:cn.itcast.txl.domain;cn.itcast.txl.dao;cn.itcast.txl.dao.impl;cn.itcast.t ...

  7. Zookeeper安装部署

    Zookeeper安装 1. 安装 wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz ...

  8. 让Windows蓝屏死机

    ssdt 随便一个函数入口改90就蓝了 ------------------------------------------------- program Project2; uses Windows ...

  9. 设计模式之工厂方法模式VS简单工厂方法模式

    名词解释: 简单工厂:这个实在是没什么解释的,就是一个工厂类,然后有一个方法,根据传递的参数可以通过switch(你也可以是if,或者是使用高端的反射 )来进行对象的创建. 工厂方法:定义一个用于创建 ...

  10. win32 api ShouCursor 根据内部计数器 是否>= 0 决定是否 显示光标,每true时计数器+1,每false-1

    win32 api ShouCursor 根据内部计数器 是否>= 0 决定是否 显示光标,每true时计数器+1,每false-1,编程时true 和 false 的次数容易产生bug.