三元组[01 Trie计数]】的更多相关文章

也许更好的阅读体验 \(\mathcal{Description}\) \(\mathcal{Solution}\) 有两种方法都可以拿到满分 \(Solution\ 1\) 考虑枚举\(y\) 建两个\(01Trie\),要支持删除操作 一颗\(Trie\)维护\(y\)左边的信息 一颗\(Trie\)维护\(y\)右边的信息 在枚举\(y\)的时候左边的添加,右边的删除,可做到\(log\)维护,建树是\(nlog\) 暴力的想法是两个\(Trie\)一起跑,枚举在哪一位开始不一样,前面的情…
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题面: Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total Submission(s): 6430    Accepted Submission(s): 2783 Problem Description Zeus 和 Prometheus 做了一个游戏,…
字典树中根到每个结点对应原串集合的一个前缀,这个前缀由路径上所有转移边对应的字母构成.我们可以对每个结点维护一些需要的信息,这样即可以去做很多事情. #10049. 「一本通 2.3 例 1」Phone List #include <bits/stdc++.h> using namespace std; namespace Trie { struct Node { Node *ch[]; int val; Node* clear() { ;i<;i++) ch[i]=NULL; val=…
Trie树是字符串问题中应用极为广泛的一种数据结构,可以拓展出AC自动机.后缀字典树等实用数据结构. 然而在此我们考虑0-1 Trie的应用,即在序列最大异或问题中的应用. 这里的异或是指按位异或.按位异或有很多重要的性质.比如可拆分性,每个位可以进行单独处理后线性合并得到最终结果. 同时按位异或也是可减的.比如0111 ^ 1010 = 1101, 那么 1101 ^ 1010 = 0111. 证明从略. 首先我们考虑0-1 Trie的版本,也就是 给定一个序列a[i], 每次询问一个数x与a…
不想多说什么了.费空间,也不算太快,唯一的好处就是好写吧. #include <cstdio> #include <cstring> const int MAXN=100010<<5,INF=10000000; int n; class Trie { public: Trie(void) { cnt=1; memset(s,0,sizeof s); } void Insert(int x) { int k=1,p=x+INF; for(int i=30,t;~i;++s…
Description 给定一些数,求这些数中两个数的异或值最大的那个值 Input 多组数据.第一行为数字个数n,1 <= n <= 10 ^ 5.接下来n行每行一个32位有符号非负整数. Output 任意两数最大异或值 Sample Input 3 3 7 9 Sample Output 14 Hint Source CSGrandeur的数据结构习题 异或 异或运算符(^ 也叫xor(以后做题会遇到xor,就是异或)) 规则:0^0 = 0,0^1=1,1^0=1,1^1=0 参加位运…
题目描述 给定一个非负整数序列 \(\{a\}\),初始长度为\(n\). 有 \(m\) 个操作,有以下两种操作类型: \(A\ x\):添加操作,表示在序列末尾添加一个数 \(x\),序列的长度 \(n+1\). \(Q\ l\ r\ x\):询问操作,你需要找到一个位置 \(p\),满足\(l \le p \le r\),使得: \(a[p] \oplus a[p+1] \oplus ... \oplus a[N] \oplus x\)最大,输出最大是多少. 输入格式 第一行包含两个整数…
源:CNUOJ-0384 http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=354 题目分析:当时拿到这道题第一个想法就是排序后n^2暴力枚举,充分利用好有序这一特性随时“短路”. read(n);read(m); int temp; ; i < n; i++) { read(temp); if(temp <= m) { p[tot].v = temp; p[tot++].num = i; } } sort(p, p + tot)…
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1588 题目大意: 给n1个0和n2个1,连续的0不超过k1个,连续的1不超过k2个.问序列有几种(对1000000001(109+1)取模) n1,n2<=100 k1,k2<=10 题目思路: [动态规划] 动态规划比较明显. f[i][j][k][0]表示 i个0 j个1 末尾连续k个0的方案数 f[i][j][k][1]表示 i个0 j个1 末尾连续k个1的方案数 根据最后末…
链接:http://poj.org/problem?id=3764 题面: The xor-longest Path Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11802   Accepted: 2321 Description In an edge-weighted tree, the xor-length of a path p is defined as the xor sum of the weights o…
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4260 题面: 4260: Codechef REBXOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2596  Solved: 1142[Submit][Status][Discuss] Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN.     Out…
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5536 题面; Chip Factory Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 6277    Accepted Submission(s): 2847 Problem Description John is a manager o…
题目大意: 给定\(a, b, c\),求\(\sum \limits_{i = 1}^a \sum \limits_{j = 1}^b \sum \limits_{k = 1}^c [(i, j) = 1][(j, k) = 1][(i, k) = 1]\) $a, b, c \leq 5*10^4 $ 首先莫比乌斯反演 $Ans = \sum \limits_{i = 1}^a \sum \limits_{j = 1}^b \sum \limits_{k = 1}^c [(i, j) = 1…
题目描述 现在有一颗以 1 为根节点的由 n 个节点组成的树,树上每个节点上都有一个权值 \(v_i\).现在有 Q 次操作,操作如下: 1 x y :查询节点 x 的子树中与 y 异或结果的最大值. 2 x y z :查询路径 x到 y 上点与 z 异或结果最大值 输入格式 第一行是两个数字 n , Q . 第二行是 n 个数字用空格隔开,第 i 个数字 \(v_i\) 表示点 i 上的权值. 接下来 n−1 行,每行两个数, x,y ,表示节点 x 与 y 之间有边. 接下来 Q 行,每一行…
Description 给定 \(n\) 个点的带边权树,求一条异或和最大的简单路径 Input 第一行是点数 \(n\) 下面 \(n - 1\) 行每行三个整数描述这棵树 Output 输出一个数代表答案 Hint \(1~\leq~n~\leq~10^5~,~1~\leq~w~<~2^{31}\),其中 \(w\) 是最大边权 Solution 考虑由于自身异或自身对答案无贡献,对于两个点 \(u,v\),他们简单路径上的异或和即为他们分别向根节点求异或和的两个值的疑惑值. 然后考虑枚举每…
题目链接 题解 看到异或和最大就应该想到01 trie树 我们记\(S_i\)为前i项的异或和 那么我们的目的是最大化\(S_n\)^\(x\)^\(S_{j-1}\) \((l <= j <= r)\) (注意是\(j-1\), 所以l和r都要减1) \(S_n\)^\(x\)已经固定, 那么我们可以把\(S_j\)放入trie树搞 那么怎么处理区间呢? 类似主席树 记录一下\([1-i]\)每个节点被多少个数经过 那么两棵trie树相减,就得到了 \([l-r]\)这段区间的信息 然后就是…
Trie树的应用题目. 在线建立一棵01 Trie树,然后按照要求用询问在上面跑,用单调栈维护答案即可. #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<cmath> #include<ctime> #include<algorithm> #include<m…
本题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3261 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Q l r x:询问操作,你需要找到一个位置p,满足l<=p<=r,使得: a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少. 输入 第一行包含两个整数 N  ,M,含义…
链接:https://ac.nowcoder.com/acm/contest/920/B来源:牛客网 定义一张图的生成链是原图的一棵生成树,且这棵树退化成一条链.我们称一条生成链是原图的最小生成链,当且仅当该最小生成链中边权最大的边是原图的所有生成链最大边的边权中最小的. 现有一个 n 个点的完全图,点编号为1 到 n.另给出一个长度为n 的序列 ai​,完全图中第 i 个点与第j 个点间的边的边权为 ai⊕aj,其中 ⊕ 表示按位异或运算. 请您找出该完全图的最小生成链.由于答案可能很多,您只…
如果你了解过 01 Trie 和 可持久化线段树(例如 : 主席树 ).那么就比较好去可持久化 Trie 可持久化 Trie 当 01 Trie 用的时候能很方便解决一些原本 01 Trie 不能解决的一些问题 01 Trie 的经典贪心算法可以在一个数集里面找出某个数和 X 异或的最值 但若数集不固定.变成了每次问询一段区间或者树上路径此时 01 Trie 便无法快速解决 这个时候需要使用可持久化的 Trie 来维护和进行查询操作.例如用前缀和建 Trie 就能方便查询某一区间的状况 可持久化…
求 \(n\) 元数列的 \(k\) 个不同的子区间使得各个子区间异或和之和最大. Solution (差点又看错题了) 做个前缀和,于是转化成求序列异或和最大的 \(k\) 个数对 建一棵可持久化 0-1 Trie,这样我们就可以 \(O(log n)\) 求出对于某个右端点,它的所有可能答案中,第 \(k\) 大的答案 然后利用堆来维护答案.我们先把对每一个右端点,第 \(1\) 大的答案插入堆.然后循环弹出.每次弹出一个,如果它是 \(u\) 这个右端点对应的第 \(v\) 大的答案,我们…
1.筛\(phi\) \(logn\)求少数\(phi\) inline int phi(R int x){ R int res=x,tmp=x; for(R int i=2;i*i<=x;i++){ if(tmp%i==0)res=res*(i-1)/i; while(tmp%i==0)tmp/=i; } if(tmp>1)res=res*(tmp-1)/tmp; return res; } 线性求\(phi\) inline void getphi(R int n){ vis[1]=0;…
按订正顺序排序 现在是乱排的了 完整代码占版面 所以只放 AC 记录链接 Good Bye 2021: 2022 is NEAR 这场打得真拉/tuu A. 简单签到 开场就读错题,浪费 5min /kk AC submission B. 若存在 \(s_k<s_{k+1}\) ,选满足该条件的最小 \(k\) : 否则可以证明答案在 \(k=1\) 或 \(n\) 时取到,判断一下即可. 吃了四发罚时,降智了属于是 AC submission C. 题意就是要将 \(\{a_n\}\) 修改成…
TOC 建议使用 Ctrl+F 搜索 . 目录 小工具 / C++ Tricks NOI Linux 1.0 快速读入 / 快速输出 简易小工具 无序映射器 简易调试器 文件 IO 位运算 Smart Double 数论 GCD 快速幂相关 分数模板类 EI 的取模还原分数 逆元 整除分块 线性筛 扩展欧几里得算法 (exgcd) 类欧几里得算法 中国剩余定理 (CRT) & exCRT BSGS & exBSGS 积性函数筛子 组合计数 组合数取模 伯努利数 斯特林数 Catalan 数…
学习完HTML和CSS后,终于要开始学习PHP啦!前面的铺垫只为后路的畅顺! PHP环境搭建: 企业中常用到的环境是:Linux+Apache+MySQL+PHP 学习环境是:Windows+Apache+MySQL+PHP 工具 Apache 2.4.4 MySQL 5.6.23 PHP 5.5.22 安装教程:php 2014.9.5安装教程 PHP源码学习网站 站长之家 源码天堂 脚本之家 源码之家 A5源码 帮助文档:php_enhanced_en.chm PHP概述 PHP(Hyper…
看黄学长的代码才写出来的,sro_hzwer_orz 原题: 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色,Sg张绝色.他又询问有多少种方案,Sun想了一下,又给出了正确答案. 最后小春发明了M种不同的洗牌法,这里他又问Sun有多少种不同的染色方案.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)洗成…
在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据结构模板 ⊙基本数据结构 1.链表: 块状链表:没练过 Dancing Links:用于优化搜索.解决精确覆盖问题和重复覆盖问题的利器. Knuth教授的始祖论文:Dancing Links中文版 Dancing Links介绍(这篇对DLX的工作过程演示的很详细) DLX——Dancing Links(这篇…
一开始我用的Trie+计数,但是不是计多了就是计少了,后来暴力暴过去的…… 看了别人的代码知道是字符串哈希,但是仍有几个地方不理解: 1.26^500溢出问题 2.没考虑哈希碰撞? 跪求指点! #include <cstdio> #include <cstring> #include <cstdlib> #define LL unsigned long long int ; ; int N; char str[MAXN][MAXLEN]; int len[MAXN];…
D:即有不超过52种物品,求容量为n/2的有序01背包方案数.容易想到设f[i][j]为前i种物品已用容量为j的方案数,有f[i][j]=f[i-1][j-a[i]]*C(n/2-j+a[i],a[i])+f[i-1][j]*C(n/2-s[i-1]+j,a[i]).显然本质不同询问只有O(k2)种,暴力就是O(n·k3)的. 考虑优化,询问相当于是把两个物品从背包中拿出,合并两物品后再放入背包.只要线性完成拿出物品的操作就可以优化到O(n·k2).然而上面的式子并不能完成还原,因为后一部分的系…
一.题目链接 https://nanti.jisuanke.com/t/31720 二.题意 给$N$种船只,第$i$种船的载重量是$V_i$,数量是$2^{C_i}-1$.接下来有$Q$次询问,每次给定一个数字$S(1 \le S \le 10000)$,表示货物重量,回答有多少种载货方案.注意,每条船要么不载货,要么满载. 三.思路 比较裸的多重背包.如果写最朴素的多重背包$dp$,时间复杂度是$O(N*10000*2^{C_i})$,显然会超时. 所以,考虑二进制优化.做法是,设$C_i$…