【CF1097F】Alex and a TV Show

题面

洛谷

题解

我们对于某个集合中的每个\(i\),令\(f(i)\)表示\(i\)作为约数出现次数的奇偶性。

因为只要因为奇偶性只有\(0,1\)两种,我们考虑用\(bitset\)维护这个\(f\)。

那么,

对于\(1\)操作你可以预处理一下\(v\)的\(bitset\),

对于\(2\)操作就是两个集合的\(bitset\)异或一下,

对于\(3\)操作就是两个集合的\(bitset\)与一下。

最后我们要由\(f(i)\)推回\(i\)的出现次数,记为\(g(i)\),显然有

\[f(n)=\sum_{d|n} g(d)
\]

莫比乌斯反演一下,

\[g(n)=\sum_{n|d} \mu (\frac dn) f(d)
\]

你对于每个\(n\)把\(n|d\)的\(\mu (\frac dn)\bmod 2\)预处理出来放在一个\(bitset\)就好了。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <bitset>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 1e5 + 5, MAX_M = 7005;
bitset<MAX_M> bs[MAX_N], fact[MAX_M], mu[MAX_M], m;
int N = 7000, Q;
void Prepare() {
m.set();
for (int i = 2; i * i <= N; i++)
for (int j = i * i; j <= N; j += i * i) m[j] = 0;
for (int i = 1; i <= N; i++)
for (int j = i; j <= N; j += i) fact[j][i] = 1, mu[i][j] = m[j / i];
} int main () {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
Prepare();
N = gi(), Q = gi();
while (Q--) {
int op = gi(), x = gi(), y = gi(), z;
if (op == 1) bs[x] = fact[y];
if (op == 2) z = gi(), bs[x] = bs[y] ^ bs[z];
if (op == 3) z = gi(), bs[x] = bs[y] & bs[z];
if (op == 4) printf("%lu", (bs[x] & mu[y]).count() & 1);
}
return 0;
}

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

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

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

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

  3. retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】

    项目地址:https://github.com/baiqiantao/retrofit2_okhttp3_RxJava_butterknife.git <uses-permission andr ...

  4. CF1097F Alex and a TV Show

    题目地址:CF1097F Alex and a TV Show bitset+莫比乌斯反演(个人第一道莫比乌斯反演题) 由于只关心出现次数的奇偶性,显然用bitset最合适 但我们并不直接在bitse ...

  5. [CodeForces-1225B] TV Subscriptions 【贪心】【尺取法】

    [CodeForces-1225B] TV Subscriptions [贪心][尺取法] 标签: 题解 codeforces题解 尺取法 题目描述 Time limit 2000 ms Memory ...

  6. 【Codeforces Round #442 (Div. 2) A】Alex and broken contest

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意是所有的名字里面,只出现了其中某一个名字一次. [代码] #include <bits/stdc++.h> usin ...

  7. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  8. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  9. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

随机推荐

  1. python-2-条件判断

    前言 python3当中的条件语句是非常简单简洁的,说下这两种:if 条件.while 条件. 一.if 条件语句 1.if 语句: # 如果条件成立,打印666 if True: print(666 ...

  2. LeetCode 21:合并两个有序链表 Merge Two Sorted Lists

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. Merge two sorted linked lists and return it as a new ...

  3. Docker安装使用以及mlsql的docker安装使用说明

    1.检查内核版本,必须是3.10及以上 uname -r 2.安装 yum -y install docker #1.启动   docker systemctl start docker #1.1.验 ...

  4. Java代码开发之《安全规约》

    安全规约 1. [强制]隶属于用户个人的页面或者功能必须进行权限控制校验.     说明:防止没有做水平权限校验就可随意访问.修改.删除别人的数据,比如查看他人的私信内容.修改 他人的订单. 2. [ ...

  5. Kubernetes 中的服务发现与负载均衡

    原文:https://www.infoq.cn/article/rEzx9X598W60svbli9aK (本文转载自阿里巴巴云原生微信公众号(ID:Alicloudnative)) 一.需求来源 为 ...

  6. 大一结业项目之一(C#晨曦超市管理系统 )

                                             C#晨曦超市管理系统                            我现是湖南工程职业技术学院大一的学生,很快 ...

  7. ef linq多表查询(三表)

    var ph = (from c in reef.CQICC_CLIENT join v in reef.CQICC_VISIT_CLIENT on c.CLIENT_T_ID equals v.CL ...

  8. php取整的几种方式,四舍五入,舍去法取整,进一法取整

    php取整的几种方式,四舍五入,舍去法取整,进一法取整方式一:round 对浮点数进行四舍五入语法:float round ( float val [, int precision] ) echo r ...

  9. 020.Dockerfile

    docker-cli读取Dockerfile,根据指令生成定制的docker镜像. Dockerfile的指令根据作用可以分为两种,构建指令和设置指令. 构建指令:用于构建image,其指定的操作不会 ...

  10. VMware虚拟机可与Win10物理机互ping并可访问互联网的设置方法

     一.系统环境: VMware 15.Windows 10 1903.Windows 7 虚拟机 二.具体步骤: 1.Win10物理机,控制面板-所有控制面板项-网络连接-物理网卡适配器右键-属性-共 ...