HDU 5715

原创 2016年05月31日 14:45:44

看的别人的博客写的很好点击打开链接

代码如下

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>

using namespace std;
typedef long long ll;
#define rep(i,n) for(int i = 0 ; i<(int)n;i++)
#define rep1(i,x,y) for(int i=(int)x;i<=(int)y;i++)
#define lowbit(x) (x&-x)

const int N =10010;

struct trie{
    int son[N*32][2], tim[N*32], tot;
    void init(){
        son[0][0] = son[0][1] = tot = 0;
        tim[0] = 1;
    }
    void insert(int val){
        int t = 0;
        for(int i = 30; i >= 0; --i){
            int c = (val >> i) & 1;
            if(son[t][c] == 0){
                son[t][c] = ++tot;
                son[tot][0] = son[tot][1] = tim[tot] = 0;
            }
            t = son[t][c];
            tim[t]++;
        }
    }
    void del(int val){
        int t = 0;
        for(int i = 30; i >= 0; --i){
            int c = (val >> i) & 1;
            int tt = t;
            t = son[t][c];
            tim[t]--;
            if(tim[t] == 0){
                son[tt][c] = 0;
                break;
            }
        }
    }
    int query(int val){
        int ret = 0, t = 0;
        for(int i = 30; i >= 0; --i){
            int c = (val >> i) & 1;
            if(son[t][c^1]){
                t = son[t][c^1];
                ret += (1 << i);
            }
            else {
                t = son[t][c];
            }
        }
        return ret;
    }
}tree[15];

int n,m,L;
bool d[N][11];
int a[N];
bool judge(int x){
    memset(d , 0 , sizeof(d));
    d[0][0] = 1;
    rep(i , m + 1) tree[i].init();
    tree[0].insert(0);

    for(int i = 1 ; i<=n ; i++){
         rep(j , m){
             if(i > L && d[i - L - 1][j])
                   tree[j].del(a[i - L - 1]);
         }
         for(int j = m ; j>=1 ; j--){
             if(tree[j - 1].query(a[i]) >= x){
                    d[i][j] = true;
                    tree[j].insert(a[i]);
             }
         }
    }
    return d[n][m];
}
int main()
{
    int T , kase = 1;
    scanf("%d",&T);
    while(T--){
        scanf("%d %d %d",&n,&m,&L);
        rep1(i,1,n) scanf("%d",&a[i]) , a[i]^=a[i-1];
        int l = 0 , r = 1e9 + 100;
        while(l < r){
            //cout<<l <<" "<<r<<endl;
            int mid =(l + r)/2;
            if(judge(mid)) l = mid + 1;
            else r = mid;
        }
        printf("Case #%d:\n%d\n",kase++,l - 1);
    }
    return 0;
}


hdu5451 矩阵快速幂+暴力打表循环节

#include using namespace std; #define rd(x) scanf("%d",&x) #define rdd(x,y) scanf("%d%d",&x,&y) #def...
  • zjck1995
  • zjck1995
  • 2015年09月19日 22:42
  • 3102

hdu 5715 XOR 游戏(trie)

dp[i][k] = max(min(dp[j][k-1], s[j] ^ s[i]),dp[i][k])。 二分答案val,则dp[j][k-1]肯定要满足大于等于val,并且s[j] ^ s[i]...
  • u013849646
  • u013849646
  • 2016年05月29日 22:52
  • 533

HDU 5715 XOR 游戏(二分+dp+01字典树)

这题要求的是n长度的序列分成m段,每段长度小于等于L,使得这些段的异或和的最小值最大这题要求的是n长度的序列分成m段,每段长度小于等于L,使得这些段的异或和的最小值最大 最大化最小值,考虑二分答案x...
  • Miracle_ma
  • Miracle_ma
  • 2016年08月18日 20:13
  • 251

英特尔响应安全研究调查结果 intel漏洞 CVE-2017-5715、CVE-CVE-2017-5753、CVE-2017-5754

英特尔和其他技术公司已经意识到新的安全研究,描述了软件分析方法,当用于恶意目的时,有可能不正确地收集来自运行设计的计算设备的敏感数据。英特尔相信这些漏洞利用不会破坏,修改或删除数据。 更多: 英特尔...
  • qq_24719817
  • qq_24719817
  • 2018年01月13日 13:30
  • 390

HDU 1220 Cube (组合数学)

Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016年07月19日 14:19
  • 545

hdu6030 (矩阵快速幂)

这道题让我深深感到了线性代数的重要性啊,递推关系式不是随便搞搞就能出来的! 如果用a表示红色,用b表示蓝色。题意明显可以看出只需要管长度2和3的连续序列是否符合! 如果以b结尾,那么下一个必须是a,或...
  • nucshiyilang
  • nucshiyilang
  • 2017年05月08日 11:59
  • 301

hdu 5178 二分查找

原文链接 源代码1: #include #include #include using namespace std; int main() { long long int i,j,k,l...
  • u014265347
  • u014265347
  • 2015年05月09日 23:37
  • 561

HDU_Steps8.1 栈,队列 HDU1702 HDU1022 HDU1237 HDU3228 HDU1873 HDU1509 HDU1870 HDU1387

8.1 基本都是简单的栈和队列 8.1.1 HDU1702 ACboy needs your help again! 入门题 8.1.2 HDU1022 Train Problem I...
  • swm8023
  • swm8023
  • 2011年10月25日 00:46
  • 4075

HDU2602/HDU1114/HDU2191(重新整理一下01背包,完全背包,多重背包)

好长时间不做背包的问题,有一点遗忘,现在把这些问题整理一下~ 一.01背包(HDU2602) 题目:http://acm.hdu.edu.cn/showproblem.php?pid=2602 题意就...
  • riba2534
  • riba2534
  • 2017年01月11日 13:24
  • 1090

hdu5444 Elven Postman(二叉树遍历)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5444 题目大意:给出一颗二叉树的先序遍历,默认的中序遍历是1.、2、……n。给出q个询问,询...
  • aaaaacmer
  • aaaaacmer
  • 2015年09月14日 17:00
  • 1321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 5715
举报原因:
原因补充:

(最多只允许输入30个字)