CF1616H Keep XOR Low(Trie 树上 DP) CF1616H Keep XOR Low 给你nn 个整数 a1,a2,⋯,ana1,a2,⋯,an 和一个整数 xx。 你需要求出 {1,2,⋯,n}{1,2,⋯,n} 的一个子集 SS,满足 SS 中任意两个不同的元素 i,ji,j,满足 ai xor aj≤xai xor aj≤x。 求选取 SS 的方案数,对 998244...
CF1616H.Keep XOR Low题解 题意# 给你n个整数a1,a2,⋯,an和一个整数x。 你需要求出{1,2,⋯,n}的一个子集S,满足S中任意两个不同的元素i,j,满足aixoraj≤x。 求选取S的方案数,对998244353取模的结果。 1≤n≤150000,0≤ai,x<230
我们来一个一个解释转移方程。 首先是fxfx的转移,当前位为00时,我们不能在异侧子树中选数,故要么从左子树选,要么从右子树选,故两边加和,同时因为加和的过程中空集被算了两次。当前位为11时,同侧子树中选数没有要求,异侧子树互相约束,根据定义即gx0,x1gx0,x1。 再来看gx,ygx,y的转移,首先我们应当明确...
首先根据两两异或想到 01Trie,既然是计数自然考虑在 01Trie 上 dp. 先将aa中的所有数插入 01Trie. 最直观的想法是按位 dp,也就是令f[u]f[u]表示 01Trie 上在uu的子树内选取的合法方案数。 考虑xx在uu所代表的二进制位上的取值,发现如果是11的话下面的两棵子树之间会相互限制,所以很难转移。 考虑改改...
标签:DP,分治 Point_King 粉丝-37关注 -41 +加关注 0 0 «CF1616D Keep the Average High »P4769 [NOI2018] 冒泡排序 posted @2021-12-31 12:03Point_King阅读(152) 评论(2)编辑 CF1616H Keep XOR low_ 21/12/31 12:0315220 25435:05 ~ 8:28 ...
CF1616H Keep XOR Low linkSolution不难想到先建出一个 01trie 树。我们首先先考虑如果在一个子树内进行 dp 是否可行,假设当前深度为 dd,可以发现当 XX 在dd 位为11 的时候我就可以往两个儿子走,这样我们就考虑不到了。所以我们设 g(u1,u2,d)g(u1,u2,d) 表示从 u1,u2u1,u2 中选出若干个数使得两...
保持较小异或 (Keep XOR Low, CF1616H) 给你n(1≤n≤1.5×105)n(1≤n≤1.5×105)个整数ai(0≤ai<230)ai(0≤ai<230)和一个整数x(0≤x<230)x(0≤x<230), 问你能取多少种不同的非空下标集合, 满足对于集合中任意两个元素i,ji,j, 都有ai⊕aj≤xai⊕aj≤x, 其中⊕⊕表示异或操作. 输出答案...
CF1616H Keep XOR Low 题面传送门 终究还是太菜了,赛时没冲出来不说了,到最后搭了个拍才发现自己错在哪里。 看上去这种异或题肯定是扔到Trie上去。然后看上去就是个先确定前多少位相同,然后一位11变成00然后随便算? 设fufu为Trie上uu这个点的子树内的答案,然后发现好像不太好算? 因为如果xx这一位为11那么...