题意:有n个可重集合,有四种操作: 1:把一个集合设置为单个元素v. 2:两个集合求并集. 3:两个集合中的元素两两求gcd,然后这些gcd形成一个集合. 4:问某个可重复集合的元素v的个数取模2之后是多少. 思路:因为集合的元素是对2取模,那么我们可以用bitset来代替可重复集合.但是,如果每个bitset来直接代表多重集的话,第三个操作会很麻烦.所以我们每个集合的bitset用来代表每个元素和每个元素约数的集合,这样某个约数为标记为1说明这个约数的倍数的和为奇数(这个约数的倍数就是这个元素…
传送门 由于只要考虑 $\mod 2$ 意义下的答案,所以我们只要维护一堆的 $01$ 容易想到用 $bitset$ 瞎搞...,发现当复杂度 $qv/32$ 是可以过的... 一开始容易想到对每个集合开一个 $bitset$ ,叫 $cnt[]$ ,维护各种值的数出现了奇数还是偶数次 因为要维护那个奇怪的 $3$ 操作,所以改成维护各种值的倍数出现了奇数还是偶数次,即 $cnt[x]$ 维护集合内所有 $x|d$ 的数 $d$ 的出现次数 那么对于操作 $3$,$x$ 的倍数和 $y$ 的倍数…
传送门 发现自己对mobius反演的理解比较浅显-- 首先我们只需要维护每一个数的出现次数\(\mod 2\)的值,那么实际上我们只需要使用\(bitset\)进行维护,每一次加入一个数将其对应次数异或\(1\).那么\(2\)操作就相当于将集合\(x\)对应的\(bitset\)赋值为\(y\)与\(z\)的异或和. 看到\(3\)操作中的gcd,考虑莫比乌斯反演.我们在加入一个数到集合中的时候,不是加入它本身,而是加入它的所有因子.这样我们的\(3\)操作的实质就是一个按位与操作了. 对于\…
传送门 除了操作 \(3\) 都可以 \(bitset\) 现在要维护 \[C_i=\sum_{gcd(j,k)=i}A_jB_k\] 类比 \(FWT\),只要求出 \(A'_i=\sum_{i|d}A_d\) 就可以直接按位相乘了 求答案就是莫比乌斯反演,\(A_i=\sum_{i|d}\mu(\frac{d}{i})A'_i\) 把每个数字的 \(\mu\) 的 \(bitset\) 预处理出来,乘法就是 \(and\) 最后用 \(count\) 统计答案 # include <bits…
Codeforces 题目传送门 & 洛谷题目传送门 1A,就 nm 爽( 首先此题一个很棘手的地方在于贡献的计算式中涉及 \(\varphi(a_ia_j)\),而这东西与 \(i,j\) 都有关,无法拆开来计算,因此无法独立考虑 \(i,j\) 的贡献.因此我们要想方设法把这里面的 \(a_ia_j\) 拆开来,我们考虑探究 \(\varphi(a_ia_j)\) 与 \(\varphi(a_i),\varphi(a_j)\) 有什么关系,很容易发现一个性质,那就是 \(\varphi(a_…
蒟蒻数学渣呀,根本不会做. 解法是参考 https://blog.csdn.net/xs18952904/article/details/88785210 这位大佬的. 状态的设计和转移如上面博客一样:dp[i]代表当前序列的gcd为i的期望长度. 那么可以写出状态转移方程:dp[i]=(1+(x/m)∑(j|i,j≠i)dp[j]) / (1-(m/i)/m) (写得有点乱,其实和上面大佬的一样的) 这里要说一下的是 x=∑(t=1,t<=m) [ gcd(t,i)==j ]  就是怎么求1<…
题目链接 \(Description\) 给定n个数(\(1\leq a_i\leq 5*10^5\)),每次从这n个数中选一个,如果当前集合中没有就加入集合,有就从集合中删去.每次操作后输出集合中互质的数对个数. \(Solution1\) 考虑暴力一点,对于要修改的数分解质因数,集合中与它互质的数的个数就是 n-(有1个公共质因数)+(有2个公共质因数)-... 维护一下每种因子(可以是多个因数的积)对应集合中的多少个数就行. 真的好暴力..但是一个数的质因子大多也就4.5个,so是没问题的…
Description 你需要维护 \(n\) 个可重集,并执行 \(m\) 次操作: 1 x v:\(X\leftarrow \{v\}\): 2 x y z:\(X\leftarrow Y \cup Z\): 3 x y z:\(X \leftarrow \{\gcd(a, b)\ |\ a\in Y, b\in Z\}\): 4 x v:询问 \(v\) 在 \(X\) 中出现次数 \(\bmod 2\) 的结果. Hint \(1\le n\le 10^5, 1\le m\le 10^6…
[CF1097F]Alex and a TV Show(bitset) 题面 洛谷 CF 题解 首先模\(2\)意义下用\(bitset\)很明显了. 那么问题在于怎么处理那个\(gcd\)操作. 然后就莫比乌斯反演一下:\(f[n]=\sum\limits_{n|d}g[d],g[n]=\sum\limits_{n|d}\mu(\frac{d}{n})f[d]\),发现这样子搞完之后,如果要处理集合\(g\)的\(gcd\)操作,就是把\(g\)变成\(f\)之后再按位乘起来(二进制意义下的按…
题目地址:CF1097F Alex and a TV Show bitset+莫比乌斯反演(个人第一道莫比乌斯反演题) 由于只关心出现次数的奇偶性,显然用bitset最合适 但我们并不直接在bitset中存 \(x\) 的个数,而是存 \(x\) 的约数出现的个数 对于操作1,先预处理然后直接赋值 对于操作2,直接 \(xor\) 对于操作3,直接 \(and\) 对于操作4,用莫比乌斯反演处理一下: 设 \(f(x)\) 为 \(x\) 出现的次数, \(g(x)\) 为 \(x\) 作为约数…