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\)进行维护,每一次加入一个数将其对应次数异 ...
随机推荐
- 【Golang】嗅探抓包,解决线上偶现问题来不及抓包的情况
背景 测试群里经常看到客户端的同学反馈发现了偶现Bug,但是来不及抓包,最后不了了之,最近出现得比较频繁,所以写个小脚本解决这个问题. 实现思路 实现的思路比较简单: 抓包 存日志 做日志管理 具体实 ...
- jenkins权限问题
今天用jenkins的时候,构建失败,看了下控制台输出,提示是缺少权限,以前也遇到过这个问题,当时是通过把相关文件夹权限设置为777解决的,这种办法有两个不好的地方,一是这样一来任何用户都能操作这个文 ...
- 删除顺序表L中下标为p(0<=p<=length-1)的元素,成功返回1,不成功返回0,并将删除元素的值赋给e
原创:转载请注明出处. [天勤2-2]删除顺序表L中下标为p(0<=p<=length-1)的元素,成功返回1,不成功返回0,并将删除元素的值赋给e 代码: //删除顺序表L中下标为p(0 ...
- 写给新手看的 MyBatis 入门
目录 MyBatis 使用前的准备 什么是 MyBatis 使用Maven 进行 MyBatis 开发环境搭建 MyBatis 入门 项目整体结构一览 MyBatis 的简单生命周期 1.获取 Sql ...
- 验证HashSet和HashMap不是线程安全
JAVA集合类: java.util包下的HashSet和HashMap类不是线程安全的, java.util.concurrent包下的ConcurrentHashMap类是线程安全的. 写2个测试 ...
- UML期末复习题——2.6:Package Diagram
第六题 包图 重要概念: 1.包图(package Diagram) 由若干个包以及包之间的关系组成.包是一种分组机制,其将一些相关的类集合为一个包,形成高内聚,低耦合的类集合,可以说,一个包相当于一 ...
- Swift 循环
循环类型 Swift 语言提供了以下几种循环类型.点击链接查看每个类型的详细描述: 循环类型 描述 for-in 遍历一个集合里面的所有元素,例如由数字表示的区间.数组中的元素.字符串中的字符. fo ...
- Eclipse的下载地址
下载地址:http://eclipse.org/
- 一百三十四:CMS系统之版块管理二
编辑 html,将数据渲染到tr上,方便js取值 js //编辑板块$(function () { $('.edit-board-btn').click(function (event) { var ...
- CockroachDB学习笔记——[译]Scaling Raft
原文链接:https://www.cockroachlabs.com/blog/scaling-raft/ 原作者:Ben Darnell 原文日期:Jun 11, 2015 译:zifeiy 在Co ...