LightOJ 1269 Consecutive Sum (Trie树)
Jan's LightOJ :: Problem 1269 - Consecutive Sum
题意是,求给定序列的中,子序列最大最小的抑或和。
做法就是用一棵Trie树,记录数的每一位是0还是1。查询的时候,如果求最大值,就尽量让高位是1,相反就尽量让高位是0。
代码如下,1y:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int N = ;
const int M = ; struct Node {
int c[];
void init() { c[] = c[] = -;}
} ; struct Trie {
Node node[M * N];
int rt, curid;
void init() { rt = curid = ; node[curid++].init();}
void insert(int x, int dg = ) {
int p = rt;
for (int i = dg - , idx; i >= ; i--) {
idx = (x & << i) != ;
if (node[p].c[idx] == -) node[node[p].c[idx] = curid++].init();
p = node[p].c[idx];
}
}
int min(int x, int dg = ) {
int p = rt, ret = ;
for (int i = dg - , idx; i >= ; i--) {
idx = (x & << i) != ;
if (~node[p].c[idx]) p = node[p].c[idx], ret <<= , ret |= idx;
else p = node[p].c[!idx], ret <<= , ret |= !idx;
}
return ret;
}
int max(int x, int dg = ) {
int p = rt, ret = ;
for (int i = dg - , idx; i >= ; i--) {
idx = (x & << i) == ;
if (~node[p].c[idx]) p = node[p].c[idx], ret <<= , ret |= idx;
else p = node[p].c[!idx], ret <<= , ret |= !idx;
}
return ret;
}
} trie; int main() {
int T, n, x;
scanf("%d", &T);
for (int cas = ; cas <= T; cas++) {
scanf("%d", &n);
int ans1 = 0x80000000, ans2 = 0x7fffffff, sum = ;
trie.init();
trie.insert();
for (int i = ; i < n; i++) {
scanf("%d", &x);
sum ^= x;
//cout << sum << endl;
ans1 = max(ans1, trie.max(sum) ^ sum);
ans2 = min(ans2, trie.min(sum) ^ sum);
trie.insert(sum);
}
printf("Case %d: %d %d\n", cas, ans1, ans2);
}
return ;
}
其实做这题的时候想到一种比较麻烦的情况,那就是数里面有负数。这样的话需要对最高位特判,从而求得最大最小值。不过没有这样的数据,所以就不这么搞了。
——written by Lyon
LightOJ 1269 Consecutive Sum (Trie树)的更多相关文章
- LightOJ 1269 - Consecutive Sum Trie树
题意:给出一串序列,求区间连续异或值的最大和最小. 思路:如果不是出在专题里,想不到可以用字典树做.先求前缀异或值,转为二进制,加入Trie树中,如果要求最大,就是尽可能走和当前位数字相反的,这样异或 ...
- 1269 - Consecutive Sum
1269 - Consecutive Sum PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 64 MB ...
- LightOJ 1129 - Consistency Checker Trie树模板
题意:给出n条串判断是否存在一个串为另一个串的前缀. 思路:套Trie树的模板,先全部插入,再查找每个字串,如果查找字串完毕,但还存在下一个节点,说明存在前缀. /** @Date : 2016-11 ...
- hdu 4825 Xor Sum trie树
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Proble ...
- HDU4825 Xor Sum —— Trie树
题目链接:https://vjudge.net/problem/HDU-4825 Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- Consecutive Sum LightOJ - 1269(区间异或和)
Consecutive Sum 又来水一发blog... 本来是昨天补codechef的题,最后一道题是可持久化字典树,然后去黄学长博客看了看 觉得字典树写法有点不太一样,就想着用黄学长的板子写码几道 ...
- HDU 4825 Xor Sum (trie树处理异或)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- CodeForces979D:Kuro and GCD and XOR and SUM(Trie树&指针&Xor)
Kuro is currently playing an educational game about numbers. The game focuses on the greatest common ...
- HDU4825 Xor Sum(贪心+Trie树)
Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeu ...
随机推荐
- JavaBean与Map的相互转换
package com.bizvane.utils.tools; import java.lang.reflect.Field; import java.util.Arrays; import jav ...
- input输入框校验
1.只能输入数字,当输入不符字符删除,光标位置不变 //只能输入数字 function onlyNumTrue(obj){ var reg = /[^\d]/g; var pos = obj.sele ...
- wordpress主题之后台菜单编辑,小工具
1一:菜单编辑 在functions.php 文件加入 if (function_exists('register_nav_menus')) { register_nav_menus(array( / ...
- Ubuntu 安装 setuptools
Setuptools的官方页面 Easily download, build, install, upgrade, and uninstall Python packages 它是一个对python的 ...
- 机器学习之决策树(ID3)算法与Python实现
机器学习之决策树(ID3)算法与Python实现 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每 ...
- ObjectIntputStream / ObjectOutputStream 类
使用 ObjectInputStream 类 ObjectOutputStream类 将对象整体 读 / 写文件中: [读写对象] 1. ObjectInputStream类 (1)基本概念 java ...
- Leetcode832.Flipping an Image翻转图像
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]. 反转图片的 ...
- 虚幻UE4的后处理特效介绍 http://www.52vr.com/thread-31215-1-1.html
转载 虚幻UE4提供了后处理特效的功能,可以实现景深,光溢出,色调调整,饱和度等等.要使用虚幻4的后处理,就一定要用到PostProcessVolumn,这是一种特殊的体积,可以放置在场景中的任何位置 ...
- 仿Google Nexus菜单样式
在线演示 本地下载
- docker 常用的命令
1.运行容器 sudo docker run -d -t -p : --name demo ubuntu:16.04 2.删除容器 sudo docker rm -f demo 3.在容器中安装必备软 ...