CF1616H Keep XOR Low(Trie 树上 DP)

CF1616H Keep XOR Low

给你 \(n\) 个整数 \(a_1,a_2,\cdots,a_n\) 和一个整数 \(x\)

你需要求出 \(\{1,2,\cdots,n\}\) 的一个子集 \(S\),满足 \(S\) 中任意两个不同的元素 \(i,j\),满足 \(a_i~{\rm xor}~a_j\le x\)

求选取 \(S\) 的方案数,对 \(998244353\) 取模的结果。

\(1\le n\le 150000,0\le a_i,x< 2^{30}\)

最开始考虑了两个数如果同时被选择,他们前几位的异或值都等于 \(x\),在一个位置上异或值小于 \(x\),后面随意。容易将题目转化到 Trie 树上去。

最重要的一个性质:同时在两棵子树内选择,如果上面已经小于 \(x\) 则可以随意选择,如果还没有小于 \(x\)(前几位异或值等于 \(x\))则继续分讨处理,子树间独立

异或前 \(k\) 位等于 \(x\) 决定了每棵子树只会有一棵其他的子树和它同时选择时会被限制,其他要么是 \(0\) 要么可以随意选择,不妨对于这些“子树对”逐一处理。

\(dp_{p,q}\) 表示在 \(p,q\) 子树内都选择数的集合数量,

  • 如果 \(x\) 这一位为 \(0\),那么只能在 \(p_0,q_0\) 内或 \(p_1,q_1\) 内同时选择,这一位强制相同。
  • 如果 \(x\) 这一位为 \(1\),那么有限制的只有 \(p_0,q_1\)\(p_1,q_0\),其他的都是可选可不选随意,分几类统计答案(\(S_p\) 表示 \(2^{siz_p}-1\)):
    • 如果 \(p,q\) 内都选择了两棵子树,答案 \(dp_{p_0,q_1}\times dp_{p_1,q_0}\)
    • 如果一棵选择两个,一棵选择一个,答案 \(dp_{p_0,q_1}\times(S_{p_1}+S_{q_0})+dp_{p_1,q_0}\times(S_{p_0}+S_{q_1})\)
    • 如果两边都只选择一棵,答案 \(S_{p_0}\times S_{q_0}+S_{p_1}\times S_{q_1}+dp_{p_0,q_1}+dp_{p_1,q_0}\)

递归求解,复杂度 \(\mathcal{O(n)}\)

“加强版”:P7156 [USACO20DEC] Cowmistry P

#define Maxn 150005
#define Maxdot 4500005
#define mod 998244353
int n,lim,All=1;
int a[Maxn],ch[Maxdot][2],hav[Maxdot];
inline void Insert(int x)
{int cur=1;for(int i=29,nex;i>=0;i--){hav[cur]++,nex=(x>>i)&1;if(ch[cur][nex]) cur=ch[cur][nex];else ch[cur][nex]=++All,cur=All,dep[All]=i;}hav[cur]++;
}
inline ll Ned(ll y) { return (havlim[y]-1+mod)%mod; }
ll solve(int p,int q,int D)
{if(!p || !q) return 0;if(D<0) return (p==q)?Ned(hav[p]):(Ned(hav[p])*Ned(hav[q])%mod);if((lim>>D)&1){if(p==q) return (solve(ch[p][0],ch[p][1],D-1)+Ned(hav[ch[p][0]])+Ned(hav[ch[p][1]]))%mod;ll t1=solve(ch[p][0],ch[q][1],D-1),t2=solve(ch[p][1],ch[q][0],D-1);ll ret=t1*t2%mod;ret=(ret+t1*(Ned(hav[ch[p][1]])+Ned(hav[ch[q][0]]))%mod)%mod;ret=(ret+t2*(Ned(hav[ch[p][0]])+Ned(hav[ch[q][1]]))%mod)%mod;ret=(ret+Ned(hav[ch[p][1]])*Ned(hav[ch[q][1]])%mod)%mod;ret=(ret+Ned(hav[ch[p][0]])*Ned(hav[ch[q][0]])%mod)%mod;ret=(ret+t1+t2)%mod;return ret;}else return (solve(ch[p][0],ch[q][0],D-1)+solve(ch[p][1],ch[q][1],D-1))%mod;
}
int main()
{n=rd(),lim=rd(),havlim[0];for(int i=1;i<=max(n,30);i++) havlim[i]=havlim[i-1]*2ll%mod;for(int i=1;i<=n;i++) a[i]=rd(),Insert(a[i]);printf("%lld\n",solve(1,1,29));return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[UVA - 11865]Stream My Contest(最小树形图+朱刘算法)

本题过于简单&#xff0c;朱刘算法模板题&#xff0c;考虑二分一下带宽即可titlecodetitle code #include <cstdio> #include <cstring> #include <iostream> using namespace std; #define MAXN 65 #define MAXM 100005 #define int long long #define in…

CSP2021NOIP2021游记

CSP Day -? 初赛 初赛考前没怎么复习&#xff0c;反倒是理直气壮的翘了一周晚修&#xff08;虽然后面就一直翘了&#xff09;。 开考之后才发现要拿那几张纸&#xff0c;监考让我考完再出去拿。 选择题很简单&#xff0c;没有啥犹豫的写完了&#xff0c;第一道读程序写结果好…

P3226 [HNOI2012]集合选数(状压 DP)

P3226 [HNOI2012]集合选数 要求选出集合 \(S\) 满足如果 \(x\) 选择了&#xff0c;\(2x\) 和 \(3x\) 都不能选择。 求 \(\{1,2,\dots,n\}\) 的符合要求的子集数量。 \(n\le 10^5\)。 发现对所有除去 \(2,3\) 因子后不同的数&#xff0c;他们之间没有关联&#xff0c;完全可以分…

微软上线Try .NET,支持在浏览器运行C#代码

微软Try .NET项目近期上线&#xff0c;这一项目允许用户通过浏览器运行和编写C#代码&#xff0c;同时还支持完整的代码提示。用户可以通过访问这一项目官网&#xff08;点此进入&#xff09;对Try .NET这一项目进行简单了解。该项目允许开发人员在浏览器中运行和编辑C#代码片段…

第46届ICPC亚洲区域赛(沈阳)L-Perfect Matchings【dp,组合数学】

正题 题目链接:https://ac.nowcoder.com/acm/contest/24346/L 题目大意 有一张2n2n2n个点的完全图&#xff0c;在上面删除一棵生成树&#xff0c;然后求这张图的完全匹配方案数。 1≤n≤20001\leq n\leq 20001≤n≤2000 解题思路 考虑容斥&#xff0c;可以dpdpdp出fi,j,0/1f…

CSP2019洛谷P5666:树的重心

解析 毒题 细节有亿点点多 我一开始的思路是没有问题的 尝试统计有多少种方案能砍出大小在一个区间的子树、 当时的想法是线段树合并 但是这个玩意在需要保留原树的情况下空间复杂度炸没了… 因为我垃圾的实现一个dfs里面就玩了七遍merge函数… 空间常数飞起 然后分数就和暴力…

[LOJ]体育成绩统计 / Score (无脑模拟,没有脑子,就是上!)

题目 好久没敲过恶心的模拟题了&#xff0c;莫名有点怀念是什么鬼&#xff0c;我还记得我的zamjena 没啥想说的&#xff0c;这道题就是没智商有码力的 纯粹是纪念一下今天上午直接肝了的两个半小时&#xff0c;真的一点思维都不需要有&#xff0c;直接上&#xff01;&#xff0…

P7137 [THUPC2021 初赛] 切切糕(博弈 概率)

P7137 [THUPC2021 初赛] 切切糕 -> 双倍经验&#xff1a;Game on Sum (Hard Version) 有 \(n\) 块方蛋糕&#xff0c;绝顶聪明的 Sight 和 Sirrel 决定将每块蛋糕都分成两块各自品尝。Sight 会依次将每块蛋糕分成两块&#xff0c;而 Sirrel 有 \(m\) 次优先选择权。 对于 \(…

程序员修仙之路--设计一个实用的线程池

菜菜呀&#xff0c;我最近研究技术呢&#xff0c;发现线上一个任务程序线程数有点多呀CEO,CTO,CFO于一身的CXOx总&#xff0c;你学编程呢&#xff1f;菜菜作为公司总负责人&#xff0c;我以后还要管理技术部门呢&#xff0c;怎么能不会技术呢CEO,CTO,CFO于一身的CXO&#xff08…

Code Names

Code Names 题意&#xff1a; 如果一个字符串通过交换两个位置可以得到另一个字符串&#xff08;也就是两个字符串只有两个位置不一样且为交换关系&#xff09;&#xff0c;我们称这两个字符串为替代关系。 现在给出n个字符串&#xff0c;求一个集合&#xff0c;使得集合内的…

CSP2019洛谷P5665:划分(单调队列,高精度)

解析 自己写的时候写了二维单调队列优化的64分 一次过还是可以满意了啦 正解的关键结论是最优的方案的最后一段一定尽可能的短 原因嘛…显然 贪心的想&#xff0c;再最后一段的段首可以往前放的情况下肯定是要往前放的&#xff0c;这样代价更小&#xff0c;同时对后面的选取也…

P7962-[NOIP2021]方差【dp,差分】

正题 题目链接:https://www.luogu.com.cn/problem/P7962 题目大意 给出一个长度为nnn的序列aaa&#xff0c;你每次可以让一个ai(1<i<n)ai−1ai1−aia_i(1<i<n)a_{i-1}a_{i1}-a_iai​(1<i<n)ai−1​ai1​−ai​&#xff0c;求能变出的最小方差。 1≤n≤400,…

【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)

未完待续...T1&#xff1a;牛牛的方程式titlesolutioncodeT2&#xff1a;牛牛的猜数游戏titlesolutioncodeT3&#xff1a;牛牛的凑数游戏titlesolutioncodeT1&#xff1a;牛牛的方程式 title solution 因为浮点错误炸了70pts 这个三元一次不定方程呢&#xff0c;其实也没有…

[AGC041F] Histogram Rooks(神仙题 网格 容斥计数)

[AGC041F] Histogram Rooks 给定一个 \(N\) 行 \(N\) 列的棋盘&#xff0c;第 \(i\) 行只有 \([1,h_i]\) 是有格子的&#xff0c;其他都是虚空。 一个棋子放在一个格子上&#xff0c;我们称一个格子被一个棋子覆盖&#xff0c;仅当这个格子与这个棋子在同一行或同一列&#xff…

程序员修仙之路-数据结构之 CXO让我做一个计算器

菜菜呀&#xff0c;个税最近改革了&#xff0c;我得重新计算你的工资呀&#xff0c;我需要个计算器&#xff0c;你开发一个吧CEO,CTO,CFO于一身的CXOX总&#xff0c;咱不会买一个吗&#xff1f;菜菜那不得花钱吗&#xff0c;一块钱也是钱呀这个计算器支持加减乘除运算就行&…

2021年度训练联盟热身训练赛第一场

2021年度训练联盟热身训练赛第一场 文章目录D.Some Sum题意&#xff1a;题解&#xff1a;代码&#xff1a;F.Pulling Their Weight题意&#xff1a;题解&#xff1a;代码&#xff1a;H On Average Theyre Purple题意&#xff1a;题解&#xff1a;代码&#xff1a;J This Aint Y…

10.17模拟

小题大作&#xff0c;必死无疑 前言 220 6010060 很久没有在CSDN上写总结了 因为这次真的犯了巨大的策略性错误&#xff01; 一句话说就是&#xff1a;要写有得分与时间相比有性价比的东西 考场 先看题 T2无疑是水题 T134相比感觉T3更可作 T1一看直接当成了神仙网络流题 受到…

P5518-[MtOI2019]幽灵乐团【莫比乌斯反演,欧拉反演】

正题 题目链接:https://www.luogu.com.cn/problem/P5518 题目大意 TTT次给出A,B,CA,B,CA,B,C求以下三个式子 ∏i1A∏j1B∏k1Clcm(i,j)gcd(i,k)\prod_{i1}^A\prod_{j1}^B\prod_{k1}^{C}\frac{lcm(i,j)}{gcd(i,k)}i1∏A​j1∏B​k1∏C​gcd(i,k)lcm(i,j)​ ∏i1A∏j1B∏k1C(lcm(…

【2020牛客NOIP赛前集训营-提高组(第二场)】题解(GCD,包含,前缀,移动)

文章目录T1&#xff1a;GCDtitlesolutioncodeT2&#xff1a;包含titlesolutioncode(正解code补充在上面了)T3&#xff1a;前缀titlesolutioncodeT4&#xff1a;移动titlesolutioncodeT1&#xff1a;GCD title solution 非常水&#xff0c;看一眼就知道了 首先我们知道每一个…

.NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务

连着两天更新叙述性的文章大家可别以为我转行了&#xff01;哈哈&#xff01;今天就继续讲讲我们的.NET Core实战项目之CMS系统的教程吧&#xff01;这个系列教程拖得太久了&#xff0c;所以今天我就以菜单部分的增删改查为例来讲述下我的项目分层之间的协同工作吧&#xff01;…