SOSDP
文章平均质量分 67
issue是fw
19 years old, struggling in life, chasing daydreams.
展开
-
Subset(枚举子集+高妙的分治)
传送门 一开始有个列表为空 add xadd\ xadd x往列表加入一个xxx del xdel\ xdel x往列表删除一个xxx cnt scnt\ scnt s找出列表中有多少个aaa满足a&s==aa\&s==aa&s==a 询问小于2e52e52e5,所有数小于等于2162^{16}216 考虑维护一个f[i]f[i]f[i]表示有多少数字是iii的子集 每次修改操作,暴力枚举xxx是哪些数字的子集,然后暴力修原创 2021-01-19 10:45:49 · 274 阅读 · 0 评论 -
CodeChef - COVERING Covering Sets(sosdp+[FWT或高妙的容斥])
VJ传送门 中文题面 题意 给定函数F(a),G(b),H(c)F(a),G(b),H(c)F(a),G(b),H(c),分别返回f,g,hf,g,hf,g,h数组的第a,b,ca,b,ca,b,c项(从零起) 求R[l]=∑F(a)∗G(b)∗H(c)R[l]=\sum F(a)*G(b)*H(c)R[l]=∑F(a)∗G(b)∗H(c) 其中满足(a∣b∣c)&l==l(a|b|c)\&l==l(a∣b∣c)&l==l 首先我们可以用SOSDPSOSDPSOSDP快速求R[l]原创 2021-01-19 08:17:14 · 378 阅读 · 0 评论 -
Jersey Number(SOS+小思维)
传送门 题意 给定一个字符串,求有多少对区间有至少一个相同的字符 其中n<=100000n<=100000n<=100000 暴力枚举不适合 但是如果把一段区间包含的状态看成一个161616位的二进制数 总共的状态就是2162^{16}216 这样转化有一个好处,设当前区间的状态为maskmaskmask,那么所有maskmaskmask的子集都是和maskmaskmask有交集 那么首先预处理a[mask]a[mask]a[mask]表示状态为maskmaskmask的有a[mask]原创 2021-01-18 23:46:03 · 1883 阅读 · 0 评论 -
KOSARE(sosdp+巧妙容斥)
传送门 考虑容斥原理,答案计算为 所有二进制为111-至少一位二进制不为111+至少两位二进制不为111… 一遍sosdpsosdpsosdp求出f[mask]f[mask]f[mask] 那么从maskmaskmask的子集中选出任意组合,111的个数最多就是maskmaskmask中111的个数 换而言之,至少有m−one(mask)m-one(mask)m−one(mask)位二进制不为111 其中one(mask)one(mask)one(mask)表示maskmaskmask中111的个数 容斥即原创 2021-01-18 22:09:46 · 330 阅读 · 0 评论 -
D. Jzzhu and Numbers(SOSDP变形+容斥)
传送门 求有多少集合按位与为000 不太知道怎么来转换… 但是正难则反,以前我们就是这么做的 求有多少集合按位与不为000 也就是说,如果确定了一个最大的数,那么能选的一定都是它的子集 然而这样还是不行…就算选的都是子集还是可能与为零。。。 这启示我们,如果想要与不为零,集合的每个数必定在某几位上都是111 是不是可以容斥原理呢?? 至少一位不为零-至少两位不为零+至少三位不为零… 如何预处理这个数组,我这个傻逼居然在这卡住了… 回忆一下sosdp求的是f[mask]=∑i&mask==iaif[原创 2021-01-18 13:59:15 · 355 阅读 · 0 评论 -
F. Bits And Pieces(高妙的记忆化dp)
传送门 题意 nnn个数aia_iai,找到满足i<j<ki<j<ki<j<k的三元组最大化ai∣(aj&ak)a_i|(a_j\& a_k)ai∣(aj&ak) 其中n<1e6n<1e6n<1e6 毫无头绪的样子… 动态维护数组f[mask]f[mask]f[mask]表示有f[mask]f[mask]f[mask]个数的子集是maskmaskmask 那么只要f[mask]>=2f[mask]>=2f[m原创 2021-01-12 18:17:39 · 357 阅读 · 0 评论 -
E. Vowels(SOSdp的简单转化)
传送门 现在给出nnn个长度为三,由前242424个字母组成的字符串 如果一个字符串包含至少一个元音我们说这个字符串是正确的 对于元音的2242^{24}224种组合,计算所有组合[ 正确单词平方 ]的异或和 把nnn个字符串压缩成242424位的二进制数字,把元音的组合也这样压缩 那么预处理一个axa_xax表示二进制为xxx的字符有axa_xax个 当元音组合的二进制是maskmaskmask时,需要知道所有与maskmaskmask有交集的xxx的f[mask]=∑axf[mask]=\sum原创 2021-01-12 16:20:42 · 353 阅读 · 0 评论 -
E. Compatible Numbers(SoSdp入门)
传送门 题意 给出nnn个数aia_iai,为每个aia_iai找到一个aja_jaj使得ai&aj==0a_i\&a_j==0ai&aj==0,若不存在输出−1-1−1 其中n,ain,a_in,ai均小于4∗1064*10^64∗106 SOSDP 因为sosdpsosdpsosdp求的是f[mask]=∑i&mask=iaif[mask]=\sum\limits_{i\&mask=i}a_if[mask]=i&mask=i∑ai 现在只原创 2021-01-12 14:56:13 · 466 阅读 · 0 评论