牛客练习赛22 简单瞎搞题(bitset优化dp)
设 ,求 S 种类数。
输入描述:
第一行一个数 n。
然后 n 行,每行两个数表示 li,ri。
输出描述:
输出一行一个数表示答案。
备注:
1 ≤ n , li , ri ≤ 100 题意: 给出n个区间,你可以随机在每个区间挑一个数,然后他们的平方和,求每个区间挑数的所有情况平方和的种类数,当然就是平方和的数重复了只能算一个
思路:开始我看范围这么小,想写搜索来着,但是想了下还是会爆,我们可以dp处理,但是还是会超时,题解说要用bitset,去理解了下
首先说下bitset的应用
Bitset的基础用法及解释:
初始化bitset对象的方法
bitset<n> b; |
b有n位,每位都为0 |
bitset<n> b(u); |
b是unsigned long型u的一个副本 |
bitset<n> b(s); |
b是string对象s中含有的位串的副本 |
bitset<n> b(s, pos, n); |
b是s中从位置pos开始的n个位的副本 |
bitset操作
b.any() |
b中是否存在值为1的二进制位? |
b.none() |
b中不存在值为1的二进制位吗? |
b.count() |
b中值为1的二进制位的个数 |
b.size() |
b中二进制位的个数 |
b[pos] |
访问b中在pos处的二进制位 |
b.test(pos) |
b中在pos处的二进制位是否为1? |
b.set() |
把b中所有二进制位的值为1 |
b.set(pos) |
把b中在pos处的二进制位值为1 |
b.reset() |
把b中所有二进制位的值为0 |
b.reset(pos) |
把b中在pos处的二进制位值为0 |
b.flip() |
把b中所有二进制位逐位取反 |
b.flip(pos) |
把b中在pos处的二进制位取反 |
b.to_ulong() |
用b中同样的二进制位返回一个unsigned long值 |
os << b |
把b中的位集输出到os流 |
反正我也不是很懂,
首先你要熟悉bitset是干嘛用的,不然你不懂他的解法>_<(说我自己>_<)
第一个好处:bitset相当于一个bool型的数组但是内存开销比bool小(bool是开了一个字节的空间嘛,然后bitset就是一个bit位)
第二个好处:bitset在合并的时候相当方便,因为bitset还可以进行位运算的操作,就是相当于一个数的二进制存储嘛,所以如果你要进行一个标记数组的合并的话,本来要进行很多次循环,但是bitset直接一个|就可以解决
还有就是你如果要改变一个数的标记的话,假如你本来标记了3你要改成6,你就只要左移三就行,因为这个bitset的<<,>>和普通数的相反,所以bitset相当于it一个很好用的标记数组,这也是我对bitset的一些个人理解,还有待改进
好,现在看题,我们结合bitset就可以很好解决这个题,我们直接一个一个区间遍历,标记他平方的所有数,然后第二个区间的标记就是在前面所有出现过的数上再加上这个区间每个数的平方,也就是<<操作,这里我用了一个滚动数组思想
开一个1000000的数组也可以
//bitset 第i个位置就代表数字i出现过没有
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + ;
bitset<maxn>ans, cnt;
int n;
int main()
{
scanf("%d", &n);
ans[] = ;
for (int i = ; i < n ; i++)
{
int x, y, k = ;
cnt.reset();
scanf("%d%d", &x, &y);
for (int j = x ; j <= y ; j++)
{
ans <<= (j * j - k);//把前一个区间的值加上这个区间的一个数的值再标记
//cout<<ans<<endl;
cnt |= ans;
k = j * j;
}
ans = cnt;
}
printf("%d\n", ans.count());
return ;
}
牛客练习赛22 简单瞎搞题(bitset优化dp)的更多相关文章
- 牛客 132C 简单瞎搞题 (bitset)
大意: 给定序列$a$的第$i$个元素的取值范围$[L_i,R_i]$, 求$a$的平方和的种类数. 用bitset优化, 复杂度$O(\frac{n^5}{\omega})$ #include &l ...
- 牛客练习赛22 C 简单瞎搞题
//位运算 // & 都是1 才是 1 // | 都是0 才是0 // ^ 不一样才是1 #include <iostream> #include <cstdio> # ...
- 简单瞎搞题(bitset的操作)
链接:https://www.nowcoder.com/acm/contest/132/C来源:牛客网 题目 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值. ...
- 【牛客练习赛22 C】
https://www.nowcoder.com/acm/contest/132/C 题目大意:在n个区间中取出n个数,相加的和一共会出现多少种结果. 题目分析:对于这种挑选数字相加,由于每一步不同的 ...
- 牛客练习赛22-E.简单数据结构1(扩展欧拉定理降幂 +树状数组)
链接:E.简单数据结构1 题意: 给一个长为n的序列,m次操作,每次操作: 1.区间加 2.对于区间,查询 ,一直到- 请注意每次的模数不同. 题解:扩展欧拉定理降幂 对一个数p取log(p)次的 ...
- 牛客练习赛40 A 小D的剧场 (思维dp)
链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福 若你摘得大的星星 你将得到大的财富 若两者都能摘得 你将得到 ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛22C Bitset
牛客练习赛22C 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 感觉二进制真是一个神奇的东西. #include <iost ...
- [堆+贪心]牛客练习赛40-B
传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 x_i 的时间,同时完成第 i 个任务的时间不 ...
随机推荐
- 4步win7下简单FTP服务器搭建(试验成功)
本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主 ...
- KM算法 带权二分匹配 O(n^3)
#include<cstdio> #include<cstdlib> #include<cstring> #include<string> #inclu ...
- 第一章:IPsecVPN
第一章 一.VPN(virtual private Network,虚拟专用网)的基本概念 VPN连接模式分为两种,分别是传输模式和隧道模式 传输模式:在整个VPN传输中,ip包头并没有被封装进去 隧 ...
- MySql之安装以及设置密码等
1.MySQL的下载安装.简单应用及目录介绍 1.下载安装 windows10的:https://www.cnblogs.com/clschao/articles/9916971.html linux ...
- Python基础之文件的初识函数
初识函数函数定义:定义一个事情或者功能. 等到需要的时候直接去用就好了了. 那么这里定义的东西就是一个函数即函数: 对代码块和功能的封装和定义1.1常用形式: def 函数名(): 函数体1.2 函数 ...
- commonJS,常用js工具方法
说明:平时项目用到的一些常见过滤方法,有些是vue过滤器,稍微修改下吧,我就不改了. js四舍五入不准确的解决(重写方法): Number.prototype.toFixed = function(l ...
- SQL Server 创建触发器(trigger)
update 触发器: if(OBJECT_ID('trigger_compost_up') is not null) drop trigger trigger_compost_up go creat ...
- python heapq模块使用
Python内置的heapq模块 Python3.4版本中heapq包含了几个有用的方法: heapq.heappush(heap,item):将item,推入heap >>> it ...
- 主流Linux发行版简介
发行版 包格式 所属厂商 发布年份 最新版本 说明 RHEL RPM RedHat 2004 7.3 RedHat Linux9.0后的企业方向,系统可以免费下载安装但无法使用官方yum源 Fedor ...
- python 怎样使用单个反斜杠\
path2 = "c:\\windows\\temp\\readme.txt" path2:用一个"\"取消第二个"\"的特殊转义作用,即为 ...