bitset 的使用
- std::bitset 的语法就不搬运了, 直接做题吧*
#515. 「LibreOJ β Round #2」贪心只能过样例
题意: 给出 n 个数 \(x_i\), 每个数的取值范围为 \([a_i, b_i]\), 求 \(\sum{x_i}\) 的种类数. \(1 ≤ n ≤ 100, 1 ≤ a_i, b_i ≤ 100\).
思路: 直接状压的话需要枚举每个状态, 有了 bitset 之后就可以整体右移来转移了.
view code
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inc(i, l, r) for (int i = l; i <= r; i++)
const int maxn = 105;
int n, a[maxn], b[maxn];
bitset<1000001> dp[maxn];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
inc(i, 1, n) cin >> a[i] >> b[i];
dp[0][0] = 1;
inc(i, 1, n) inc(j, a[i], b[i]) dp[i] |= dp[i - 1] << (j * j);
cout << dp[n].count() << "\n";
}
题意: 五维偏序
思路: 题意听起来很吓人, 但其实就是对暴力的优化. 复杂度 \(O(\frac{n^2}{w})\). 本题目 N 为3e4所以能过. 分块的写法应该能更快, 留着坑以后过来补.
view code
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inc(i, l, r) for (int i = l; i <= r; i++)
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
const int maxn = 3e4 + 5;
int n;
pii p[6][maxn];
bitset<maxn> stu[6][maxn], ans;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
inc(i, 1, n) {
inc(j, 1, 5) {
cin >> p[j][i].fi;
p[j][i].se = i;
}
}
inc(i, 1, 5) sort(p[i] + 1, p[i] + n + 1);
inc(i, 1, 5) {
inc(j, 2, n) {
stu[i][p[i][j].se] = stu[i][p[i][j - 1].se];
stu[i][p[i][j].se].set(p[i][j - 1].se);
}
}
inc(i, 1, n) {
ans.set();
inc(j, 1, 5) ans &= stu[j][i];
cout << ans.count() << "\n";
}
}
Codeforces - 1097F Alex and a TV Show
题意: 给出 n 个可重集, 有四种操作: 1.把一个集合设为一个数; 2.把一个集合变成另外两个集合的并; 3.把一个集合变为从另外两个集合中各取一个数的 gcd; 4.询问集合中某一个数的个数模2. n ≤ 1e6, 操作 q ≤ 1e6, 值域 7000.
思路: 其实做法是搬运的, 我并不会做... 如果用 bitset 维护每个集合的话不好处理操作 3. 令 bitset 维护每个集合的约数, 考虑每个数出现的奇偶, 就会发现操作 2, 3 分别对应异或, 按位与. 而操作 4 要用莫比乌斯函数推导一下:
\[\begin{aligned}&\sum\limits_{i\in A}[\frac i x=1]\\=&\sum\limits_{i\in A}\sum\limits_{d|\frac i x}\mu(d)\\=&\sum\limits_{d\in A',x|d}\mu(\frac d x)\end{aligned}\]
view code
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inc(i, l, r) for (int i = l; i <= r; i++)
const int maxn = 1e5 + 5;
const int maxm = 7005;
int n, q, op, x, y, z;
bitset<7005> fac[maxm], mul[maxm], mu, a[maxn];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
mu.set();
inc(i, 1, 7000) {
for (int j = 2; i * j * j <= 7000; j++) {
mu[i * j * j] = 0;
}
}
inc(i, 1, 7000) {
for (int j = 1; i * j <= 7000; j++) {
fac[i * j][i] = 1;
mul[i][i * j] = mu[j];
}
}
cin >> n >> q;
while (q--) {
cin >> op;
if (op == 1) {
cin >> x >> y;
a[x] = fac[y];
} else if (op == 2) {
cin >> x >> y >> z;
a[x] = a[y] ^ a[z];
} else if (op == 3) {
cin >> x >> y >> z;
a[x] = a[y] & a[z];
} else {
cin >> x >> y;
cout << (a[x] & mul[y]).count() % 2;
}
}
}
原文地址:https://www.cnblogs.com/hs-zlq/p/12431843.html
- 打包自己的aar库
- 揭开RecyclerView庐山真面目
- Python解析psiBlast输出的JSON文件结果
- 经验分享:社会工程学数据库搭建TIPS
- 过时但仍值得学习的选项卡TabHost
- 你所不知道的渗透测试:应用虚拟化的攻防
- C++中const小结
- 很多人不知道还有这个——搜索框组件SearchView
- 免费主题暗藏后门,波及WordPress等知名CMS系统
- 揭秘:针对PoS机的恶意软件工具箱
- 屏幕宽高不够,滚动视图ScrollView来凑
- 结合中间人攻击,Pidgin鸡肋漏洞变废为宝
- 日历视图CalendarView和定时器Chronometer
- 不用Linux也可以的强大文本处理方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- sqli-labs练习(第三、四关)
- 使用 Python 操作 word文档
- sqli-labs练习(第五、六关)
- 分享一个Qt写的SMTP邮件客户端(库)
- mysql学习笔记
- MapReduce的常见输入格式之NlineInputFormat
- MapReduce的常见输入格式之KeyValueTextInputFormat
- MapReduce之 FileInputFormat的切片策略(默认)
- MapReduce之片和块的关系
- MapReduce的常见输入格式之CombineTextInputFormat
- MapReduce之Job提交流程
- MapReduce之自定义InputFormat
- MapReduce之MapTask工作机制
- 数据链路层的三个基本问题
- DEBUG ArrayList