Codeforces 1097F. Alex and a TV Show
由于只要考虑 $\mod 2$ 意义下的答案,所以我们只要维护一堆的 $01$
容易想到用 $bitset$ 瞎搞...,发现当复杂度 $qv/32$ 是可以过的...
一开始容易想到对每个集合开一个 $bitset$ ,叫 $cnt[]$ ,维护各种值的数出现了奇数还是偶数次
因为要维护那个奇怪的 $3$ 操作,所以改成维护各种值的倍数出现了奇数还是偶数次,即
$cnt[x]$ 维护集合内所有 $x|d$ 的数 $d$ 的出现次数
那么对于操作 $3$,$x$ 的倍数和 $y$ 的倍数相乘后 $x$ 的倍数和 $y$ 的倍数数量都是 $cnt[x] \cdot cnt[y]$
然后就可以很容易维护了,因为只有 $0,1$ 那么其实相当于把两个 $bitset$ 取 $\text{'&'}$ 即可
同时对于操作 $2$ ,显然只要对 $bitset$ 取 $\text{'^'}$ 就行
然后操作 $1$ ,直接把 $bitset$ 清空,然后设集合内的数为 $d$ ,那么直接根号筛一下 $d$ 的因数 $x$ 然后 $cnt[x]=1$ 即可
最后是操作 $4$ ,因为我们维护的是 $x$ 的倍数的出现次数,设 $F(x),f(x)$ 分别为 $x$ 倍数出现次数,$x$ 出现次数
那么有 $F(x)=\sum_{x|d} f(d)$ ,然后就发现了熟悉的莫比乌斯反演,我们知道 $F$ 想求 $f$,直接反演可得
$f(x)=\sum_{x|d} \mu (\frac{d}{x}) F(d)$ ,由于 $\mod 2$ 意义下 $-1 \equiv 1$ 所以可以用 $bitset$ 维护一下每个 $x$ 的所有 $x|d$ 的 $\mu(d/x)$
即设 $bitset$ $g[x]$ 维护一下 $x|d$ 的 $g[x][d]=\mu(d/x)$ 然后对于 $4$ 操作 $(4\ x\ v)$ 就是 $(cnt[x]&g[v]).count()&1$
代码不长
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e5+,M=;
int n,Q;
int pri[M],mu[M],tot;
bool not_pri[M];
bitset <M> cnt[N],g[M];
void init()
{
not_pri[]=; mu[]=;
for(int i=;i<M;i++)
{
if(!not_pri[i]) pri[++tot]=i,mu[i]=;
for(int j=;j<=tot;j++)
{
ll g=1ll*i*pri[j]; if(g>=M) break;
not_pri[g]=; if(i%pri[j]==) break;
mu[g]=-mu[i];
}
}
for(int i=;i<M;i++)
for(int j=i;j<M;j+=i)
g[i][j]=abs(mu[j/i]);
}
int main()
{
n=read(),Q=read(); init();
int a,b,c,d;
while(Q--)
{
a=read(),b=read(),c=read();
if(a==)
{
cnt[b]=; int T=sqrt(c);
for(int i=;i<=T;i++)
if(c%i==) cnt[b][i]=cnt[b][c/i]=;
}
else if(a==) d=read(),cnt[b]=cnt[c]^cnt[d];
else if(a==) d=read(),cnt[b]=cnt[c]&cnt[d];
else printf("%d",int((cnt[b]&g[c]).count())&);
}
puts(""); return ;
}
Codeforces 1097F. Alex and a TV Show的更多相关文章
- Codeforces 1097F Alex and a TV Show (莫比乌斯反演)
题意:有n个可重集合,有四种操作: 1:把一个集合设置为单个元素v. 2:两个集合求并集. 3:两个集合中的元素两两求gcd,然后这些gcd形成一个集合. 4:问某个可重复集合的元素v的个数取模2之后 ...
- 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 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 ...
- 【CF1097F】Alex and a TV Show
[CF1097F]Alex and a TV Show 题面 洛谷 题解 我们对于某个集合中的每个\(i\),令\(f(i)\)表示\(i\)作为约数出现次数的奇偶性. 因为只要因为奇偶性只有\(0, ...
- CodeForces - 1097F:Alex and a TV Show (bitset & 莫比乌斯容斥)
Alex decided to try his luck in TV shows. He once went to the quiz named "What's That Word?!&qu ...
- [Codeforces 863E]Turn Off The TV
Description Luba needs your help again! Luba has n TV sets. She knows that i-th TV set will be worki ...
- CF1097F Alex and a TV Show 莫比乌斯反演、bitset
传送门 发现自己对mobius反演的理解比较浅显-- 首先我们只需要维护每一个数的出现次数\(\mod 2\)的值,那么实际上我们只需要使用\(bitset\)进行维护,每一次加入一个数将其对应次数异 ...
随机推荐
- CentOS6.8安装Docker
在CentOS6.8上安装Docker 1.Docker使用EPEL发布,RHEL系的OS首先要确保已经持有EPEL仓库,否则先检查OS的版本,然后安装相应的EOEL包:如下命令: yum insta ...
- arcgis根据表字段进行数据合并
第一步 1.地理处理-----2.数据管理工具----3.制图综合----4.融合 第二步 打开融合面板,选择输入要素,要融合的字段,选择统计字段数量,完成融合.
- Vue 目录
什么是 vue-cli 通过 vue-cli 建立出来的 vue
- centos7 设置 mysql 开机自启
前述 CentOS 7是目前较为流行的Linux发行版本.CentOS 7比起之前版本有了许多的变更.如firewall不在用iptables管理,而交由firewall-cmd管理.同样的,在Cen ...
- Flutter移动电商实战 --(15)商品推荐区域制作
1.推荐商品类的编写 这个类接收一个List参数,就是推荐商品的列表,这个列表是可以左右滚动的. /*商品推荐*/ class Recommend extends StatelessWidget { ...
- kotlin set get
1.类定义属性 默认是public的. 2.var 一个变量,也是就是属性,自动生成set get方法. 3.val 常量,没有set方法. 4. 延迟初始化属性 对于非空类型的属性是必 ...
- PAT 甲级 1028 List Sorting (25 分)(排序,简单题)
1028 List Sorting (25 分) Excel can sort records according to any column. Now you are supposed to i ...
- Response 与 Cookie
Response 与 Cookie Web服务器要完成的任务的最后一步就是向客户端返回数据.如果客户端是浏览器,那么返回的数据通常是HTML.JS.CSS或者其他类型的代码. Cookie是保存在客户 ...
- Bash Shellshock(CVE-2014-6271)破壳漏洞测试
0x01 漏洞原理 Bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以"(){"开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行 ...
- prometheus部署安装
1. 下载&部署 # 下载 [root@prometheus src]# cd /usr/local/src/ [root@prometheus src]# wget https://gith ...