Codeforces 1097F Alex and a TV Show (莫比乌斯反演)
题意:有n个可重集合,有四种操作:
1:把一个集合设置为单个元素v。
2:两个集合求并集。
3:两个集合中的元素两两求gcd,然后这些gcd形成一个集合。
4:问某个可重复集合的元素v的个数取模2之后是多少。
思路:因为集合的元素是对2取模,那么我们可以用bitset来代替可重复集合。但是,如果每个bitset来直接代表多重集的话,第三个操作会很麻烦。所以我们每个集合的bitset用来代表每个元素和每个元素约数的集合,这样某个约数为标记为1说明这个约数的倍数的和为奇数(这个约数的倍数就是这个元素)这样第三个操作实际上就是两个bitset互相AND。为什么呢?新的集合数x是奇数,只有当第一个集合和第二个集合的x也是奇数个才行。那么这种情况下怎么知道某个集合的元素v有多少个呢?我们令f(n)为询问的集合元素n的个数,g(d)为询问的集合中d及其倍数的元素的个数,那么我们可列出表达式:g(d) = ∑(d|n) (f(n)),我们反演一下,可得f(d) = ∑(d|n)(mo(n / d) * g(n)) (mo是莫比乌斯函数)。因为答案取模2,而在%2意义下-1和1是一样的,所以我们可以预处理出来n的数中哪些莫比乌斯函数值是1,哪些是0,存在一个bitset里。g(n)囊括在了每个多重集的bitset里了,那么把这个两个bitsetAND一下,算一下1的个数取模2,就是最终答案。
代码和思路参考了这篇博客:https://www.cnblogs.com/cjyyb/p/10283115.html
代码:
#include <bits/stdc++.h>
#define bit bitset<7001>
using namespace std;倍数
const int maxn = 100010;
bit a[maxn], b[7001], mup[7001], f[7001];
bool mu[7001];
void init() {
mu[1] = 1;
for (int i = 1; i <= 7000; i++)
for (int j = i + i; j <= 7000; j += i)
mu[j] -= mu[i];
for (int i = 1; i <= 7000; i++)
for (int j = i; j <= 7000; j += i)
f[j][i] = 1;
for (int i = 1; i <= 7000; i++)
for (int j = i; j <= 7000; j += i)
if(mu[j / i]) mup[i][j] = 1;
}
int main() {
int n, m, op, x, y, z;
init();
scanf("%d%d", &n, &m);
while(m--){
scanf("%d", &op);
if(op == 1) {
scanf("%d%d", &x, &y);
a[x] = f[y];
} else if(op == 2) {
scanf("%d%d%d", &x, &y, &z);
a[x] = a[y] ^ a[z];
} else if(op == 3) {
scanf("%d%d%d", &x, &y, &z);
a[x] = a[y] & a[z];
} else {
scanf("%d%d", &x, &y);
printf("%d", (a[x] & mup[y]).count() & 1);
}
}
}
Codeforces 1097F Alex and a TV Show (莫比乌斯反演)的更多相关文章
- Codeforces 1097F. Alex and a TV Show
传送门 由于只要考虑 $\mod 2$ 意义下的答案,所以我们只要维护一堆的 $01$ 容易想到用 $bitset$ 瞎搞...,发现当复杂度 $qv/32$ 是可以过的... 一开始容易想到对每个集 ...
- CF1097F Alex and a TV Show 莫比乌斯反演、bitset
传送门 发现自己对mobius反演的理解比较浅显-- 首先我们只需要维护每一个数的出现次数\(\mod 2\)的值,那么实际上我们只需要使用\(bitset\)进行维护,每一次加入一个数将其对应次数异 ...
- Codeforces 1097 Alex and a TV Show
传送门 除了操作 \(3\) 都可以 \(bitset\) 现在要维护 \[C_i=\sum_{gcd(j,k)=i}A_jB_k\] 类比 \(FWT\),只要求出 \(A'_i=\sum_{i|d ...
- Codeforces 809E - Surprise me!(虚树+莫比乌斯反演)
Codeforces 题目传送门 & 洛谷题目传送门 1A,就 nm 爽( 首先此题一个很棘手的地方在于贡献的计算式中涉及 \(\varphi(a_ia_j)\),而这东西与 \(i,j\) ...
- Codeforces - 1139D - Steps to One (概率DP+莫比乌斯反演)
蒟蒻数学渣呀,根本不会做. 解法是参考 https://blog.csdn.net/xs18952904/article/details/88785210 这位大佬的. 状态的设计和转移如上面博客一样 ...
- Codeforces.547C.Mike and Foam(容斥/莫比乌斯反演)
题目链接 \(Description\) 给定n个数(\(1\leq a_i\leq 5*10^5\)),每次从这n个数中选一个,如果当前集合中没有就加入集合,有就从集合中删去.每次操作后输出集合中互 ...
- 【Codeforces 1097F】Alex and a TV Show(bitset & 莫比乌斯反演)
Description 你需要维护 \(n\) 个可重集,并执行 \(m\) 次操作: 1 x v:\(X\leftarrow \{v\}\): 2 x y z:\(X\leftarrow Y \cu ...
- 【CF1097F】Alex and a TV Show(bitset)
[CF1097F]Alex and a TV Show(bitset) 题面 洛谷 CF 题解 首先模\(2\)意义下用\(bitset\)很明显了. 那么问题在于怎么处理那个\(gcd\)操作. 然 ...
- CF1097F Alex and a TV Show
题目地址:CF1097F Alex and a TV Show bitset+莫比乌斯反演(个人第一道莫比乌斯反演题) 由于只关心出现次数的奇偶性,显然用bitset最合适 但我们并不直接在bitse ...
随机推荐
- IDEA提交Git时忽略文件【ignore文件备份】
IntellJ IDEA设置ignore文件忽略,需: 第一步:下载idea的ignore插件,链接:https://pan.baidu.com/s/14_cfq56g1s7Lc6LdiolvWA 密 ...
- atom总结
window 系统 //查找 apm search emmet //安装 apm install emmet //删除 apm remove emmet
- 一个丰富的通知工具类 --第三方开源--NotifyUtil
把NotifyUtil Copy进自己的项目就好 实现有八种,作者在Demo里全部演示齐了,分别是 普通类型通知(单行) 普通类型通知(多行) 消息列表通知(含双图标) 含大图类型通知 自定义视图通知 ...
- MySQL相关日志介绍
1.MySQL中主要日志如下: ① 错误日志(Log Error) ② 查询日志(Query Log) ③ 二进制日志(Binary Log) 2.相关日志的作用: 1) 错误日志(Error Log ...
- 通过ifreme实现文件上传
模板页面添加ifreme <div style=' display: none;' > <iframe name ="uploadResponse_attachm ...
- New Year and Counting Cards
Your friend has n cards. You know that each card has a lowercase English letter on one side and a di ...
- Cow Exhibition (背包中的负数问题)
个人心得:背包,动态规划真的是有点模糊不清,太过于抽象,为什么有些是从后面递推, 有些状态就是从前面往后面,真叫人头大. 这一题因为涉及到负数,所以网上大神们就把开始位置从10000开始,这样子就转变 ...
- C++中rand()函数的用法
1.rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数. 2.如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = r ...
- 正确安全清空在线慢查询日志slow log的流程 (转)
1, see the slow log status; mysql> show variables like '%slow%'; +---------------------+--------- ...
- UIAlertController UIAlertView用法
项目中很多地方会出现弹出框框,来做个判断 基本方法如下 UIAlertController *alertC = [UIAlertController alertControllerWithTitle: ...