题目地址:CF1097F Alex and a TV Show

bitset+莫比乌斯反演(个人第一道莫比乌斯反演题)

由于只关心出现次数的奇偶性,显然用bitset最合适

但我们并不直接在bitset中存 \(x\) 的个数,而是存 \(x\) 的约数出现的个数

对于操作1,先预处理然后直接赋值

对于操作2,直接 \(xor\)

对于操作3,直接 \(and\)

对于操作4,用莫比乌斯反演处理一下:

设 \(f(x)\) 为 \(x\) 出现的次数, \(g(x)\) 为 \(x\) 作为约数出现的次数

显然有:\(g(x)=\sum_{x|d}\ f(d)\)

因此有:\(f(x)=\sum_{x|d}\ \mu(\frac{d}{x})\ g(x)\)

由于只关心奇偶性, \(\mu(x)=-1\) 相当于 \(\mu(x)=1\) ,因此只需要把 \(\mu(x)=0\) 的找到即可

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 100006, M = 7006;
bitset<M> a[N], p[M], miu, Miu[M];

void prework(int n) {
    miu.set();
    for (int i = 2; i * i <= n; i++)
        for (int j = 1; i * i * j <= n; j++)
            miu[i*i*j] = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; i * j <= n; j++) {
            p[i*j][i] = 1;
            Miu[i][i*j] = miu[j];
        }
}

int main() {
    prework(7000);
    int n, q;
    cin >> n >> q;
    while (q--) {
        int o;
        scanf("%d", &o);
        if (o == 1) {
            int x, v;
            scanf("%d %d", &x, &v);
            a[x] = p[v];
        } else if (o == 2) {
            int x, y, z;
            scanf("%d %d %d", &x ,&y, &z);
            a[x] = a[y] ^ a[z];
        } else if (o == 3) {
            int x, y, z;
            scanf("%d %d %d", &x, &y, &z);
            a[x] = a[y] & a[z];
        } else {
            int x, v;
            scanf("%d %d", &x, &v);
            printf("%d", (a[x] & Miu[v]).count() & 1);
        }
    }
    return 0;
}

CF1097F Alex and a TV Show的更多相关文章

  1. CF1097F Alex and a TV Show 莫比乌斯反演、bitset

    传送门 发现自己对mobius反演的理解比较浅显-- 首先我们只需要维护每一个数的出现次数\(\mod 2\)的值,那么实际上我们只需要使用\(bitset\)进行维护,每一次加入一个数将其对应次数异 ...

  2. 【CF1097F】Alex and a TV Show(bitset)

    [CF1097F]Alex and a TV Show(bitset) 题面 洛谷 CF 题解 首先模\(2\)意义下用\(bitset\)很明显了. 那么问题在于怎么处理那个\(gcd\)操作. 然 ...

  3. 【CF1097F】Alex and a TV Show

    [CF1097F]Alex and a TV Show 题面 洛谷 题解 我们对于某个集合中的每个\(i\),令\(f(i)\)表示\(i\)作为约数出现次数的奇偶性. 因为只要因为奇偶性只有\(0, ...

  4. 【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 ...

  5. 题解 CF1097F 【Alex and a TV Show】

    妙妙题-- 这道题这要求%2的个数,肯定有什么性质 于是我们想到了用\(bitset\)来处理 由于三操作有\(gcd\),于是我们又想到用反演来解决 我们回忆一下反演的柿子 设\(f(x)\)为x出 ...

  6. 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 ...

  7. 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 ...

  8. Codeforces 1097F Alex and a TV Show (莫比乌斯反演)

    题意:有n个可重集合,有四种操作: 1:把一个集合设置为单个元素v. 2:两个集合求并集. 3:两个集合中的元素两两求gcd,然后这些gcd形成一个集合. 4:问某个可重复集合的元素v的个数取模2之后 ...

  9. Codeforces 1097F. Alex and a TV Show

    传送门 由于只要考虑 $\mod 2$ 意义下的答案,所以我们只要维护一堆的 $01$ 容易想到用 $bitset$ 瞎搞...,发现当复杂度 $qv/32$ 是可以过的... 一开始容易想到对每个集 ...

随机推荐

  1. 10款Mac上程序员装机必备的开发工具推荐和下载

    10款Mac上程序员装机必备的开发工具推荐和下载 使用Mac的用户主要有两大类:设计师和程序员,为各位程序员童鞋推荐10个Mac上非常棒的开发工具和辅助工具,分享软件专题[10款Mac上程序员装机必备 ...

  2. Java实现单词树(trie)

    package com.shundong.utils; import java.util.ArrayList; import java.util.Iterator; import java.util. ...

  3. ElasticSearch的插件(Plugins)介绍

    ElasticSearch的插件(Plugins)介绍 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 目前可以扩展ElasticSearch功能的插件有很多,比如:添加自定义的映 ...

  4. Python的常用语句

    判断语句 if单层条件判断 if expression: statements1 else: statements2 if多层条件判断 if expression1: statements1 elif ...

  5. awk 处理文本:行转列,列转行

    [root@centos ~]# cat f 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 51 2 3 4 5 awk '{for(i=1;i<=NF;i++)a ...

  6. Linux下C语言连接MySQL

    本文出自   http://blog.csdn.net/shuangde800 首先保证安装: 1:安装MySQL:sudo apt-get install mysql-server mysql-cl ...

  7. linux 内核模块makefile通用模板

    ifneq ($(KERNELRELEASE),)# 在 mylist 后面添加需要编译的模块数量 mylist=hello.o a.o# 为每一个模块添加所需的文件 hello-objs := ma ...

  8. 固定footer在底部

    作者:李宇链接:https://www.zhihu.com/question/23220983/answer/25880123来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  9. HDU - 5071 Chat(模拟)

    原题链接 题意:有各种操作,模拟这个程序并输出每次操作的信息 分析:恶心模拟题...用个map记录一下各个等级女孩的谈话数,同时也便于查找权值为u的在不在队列里.因为n很小,其他就暴力模拟了. #in ...

  10. MySQL数据库基本命令-1

    第一章:数据库概述1.数据(data) 数据库(DB) 数据库管理系统(DBMS) 数据库系统(DBS)2.数据库管理系统提供的功能: (1)数据定义语言:DDL (2)数据操作语言:DML 基本的数 ...