HDU5715 XOR 游戏 二分+字典树+dp
当时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的更多相关文章
- HDU 5715 XOR 游戏 二分+字典树
XOR 游戏 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5715 Description 众所周知,度度熊喜欢XOR运算(XOR百科). 今天,它 ...
- Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp
C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...
- UVALive 3942 Remember the Word 字典树+dp
/** 题目:UVALive 3942 Remember the Word 链接:https://vjudge.net/problem/UVALive-3942 题意:给定一个字符串(长度最多3e5) ...
- 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 ...
- HDU4825 Xor Sum(字典树解决最大异或问题)
Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整 ...
- LA 3942 - Remember the Word (字典树 + dp)
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 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 ...
- HDU--5269 ZYB loves Xor I (字典树)
题目电波: HDU--5269 ZYB loves Xor I 首先我们先解决 ai xor aj 每个数转化为二进制 我们用字典树统计 每个节点 0 和 1 的出现的个数 #include< ...
- BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)
<题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0, ...
随机推荐
- nginx的健康检查功能将挂掉的Tomcat舍弃
1.Ngninx自带健康检查功能,能将挂掉的服务器舍弃,不在访问路径里 2.Nginx还有URL重写功能,能将接收到的请求,进行改写,再将新的URL分发到后端服务器上
- 3.Spring-用反射模拟IoC
1.BeanFactory.java package com.jike.spring.chapter03.reflect; import java.io.InputStream; import jav ...
- C++:运算符重载函数之友元运算符重载
5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...
- centos 安装openssl 以及库文件
yum install openssl yum install openssl-devel
- hadoop拾遗(二)---- 文件模式
在单个操作中处理一批文件,这是一个常见的要求.举例来说,处理日志的MapReduce作业可能需要分析一个月内包含在大量目录中的日志文件.在一个表达式中使用通配符来匹配多个文件是比较方便的,无需列举第个 ...
- ubuntu创建用户
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号 一方面可以帮助系统管理员对使用系统的用户进 ...
- HDU-4661 Message Passing 树形DP,排列组合
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4661 题意:有n个人呈树状结构,每个人知道一个独特的消息.每次可以让一个人将他所知的所有消息告诉和他相 ...
- 【原创】Sliding Window Maximum 解法分析
这道题是lintcode上的一道题,当然leetcode上同样有. 本题需要寻找O(N)复杂度的算法. 解体思路比较有特点,所以容易想到参考 最小栈 的解题办法. 但是最小栈用栈维护最小值很直观,这道 ...
- Ubuntu安装Apache
在虚拟机上安装了Ubuntu13.10 ,然后使用命令 sudo apt-get install apache2 安装apache总提示“E: 未找到软件包...”,不知所踪,这可能是新手容易的犯 的 ...
- npm在项目目录安装插件需要使用sudo
今天使用node的npm安装插件的时候遇到一个问题,那就是在项目目录里面安装插件的时候,必须使用超级用户(sudo)执行才会安装成功,否则会报如下错误: 以安装 gulp-uglify 为例 $ np ...