博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1097 Alex and a TV Show
阅读量:7079 次
发布时间:2019-06-28

本文共 1323 字,大约阅读时间需要 4 分钟。

除了操作 \(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 
using namespace std;typedef long long ll;const int maxn(7005);int mu[maxn], n, q, pr[maxn], tot;bitset
bc[100005], bcm[7005], bcv[7005], ispr;int main() { int i, j, op, l, r, v; mu[1] = 1; for (i = 2; i <= 7000; ++i) { if (!ispr[i]) pr[++tot] = i, mu[i] = -1; for (j = 1; j <= tot && pr[j] * i <= 7000; ++j) { ispr[pr[j] * i] = 1; if (i % pr[j]) mu[i * pr[j]] = -mu[i]; else { mu[i * pr[j]] = 0; break; } } } for (i = 1; i <= 7000; ++i) for (j = i; j <= 7000; j += i) { bcv[j].set(i); if (mu[j / i]) bcm[i].set(j); } scanf("%d%d", &n, &q); for (i = 1; i <= q; ++i) { scanf("%d%d%d", &op, &l, &r); if (op == 1) bc[l] = bcv[r]; else if (op == 2) scanf("%d", &v), bc[l] = bc[r] ^ bc[v]; else if (op == 3) scanf("%d", &v), bc[l] = bc[r] & bc[v]; else putchar(((bc[l] & bcm[r]).count() & 1) + '0'); } return 0;}

转载于:https://www.cnblogs.com/cjoieryl/p/10280400.html

你可能感兴趣的文章
第一个python实例
查看>>
算法导论-快速排序
查看>>
nfs实验文档
查看>>
dwr框架异步调用简单小例
查看>>
httpclient中使用HTTPS的方法
查看>>
判断一棵二叉树是否为平衡二叉树
查看>>
springboot实现restful
查看>>
Python通过JSON-RPC请求对以太坊智能合约进行部署和交易
查看>>
MySQL8.0新特性
查看>>
打开android手机照相机
查看>>
电子商务和政府网站用户资料泄漏
查看>>
apk反编译
查看>>
Android内存泄漏分析实战
查看>>
排序算法
查看>>
Navicat 快捷键总结
查看>>
Windows Server 2012 之NIC组合(NIC Teaming)介绍
查看>>
电脑无需设置DNS网关该如何上网
查看>>
OpenSCAD函数一览表
查看>>
今天博客开通了
查看>>
Cisco etherchannel配置
查看>>