一共有 n个数,第 i 个数是 xi 
xi 可以取 [li , ri] 中任意的一个值。

设 ,求 S 种类数。

输入描述:

第一行一个数 n。 
然后 n 行,每行两个数表示 li,ri。
 

输出描述:

输出一行一个数表示答案。
示例1

输入

复制

5
1 2
2 3
3 4
4 5
5 6

输出

复制

26

备注:

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)的更多相关文章

  1. 牛客 132C 简单瞎搞题 (bitset)

    大意: 给定序列$a$的第$i$个元素的取值范围$[L_i,R_i]$, 求$a$的平方和的种类数. 用bitset优化, 复杂度$O(\frac{n^5}{\omega})$ #include &l ...

  2. 牛客练习赛22 C 简单瞎搞题

    //位运算 // & 都是1 才是 1 // | 都是0 才是0 // ^ 不一样才是1 #include <iostream> #include <cstdio> # ...

  3. 简单瞎搞题(bitset的操作)

    链接:https://www.nowcoder.com/acm/contest/132/C来源:牛客网 题目 一共有 n个数,第 i 个数是 xi  xi 可以取 [li , ri] 中任意的一个值. ...

  4. 【牛客练习赛22 C】

    https://www.nowcoder.com/acm/contest/132/C 题目大意:在n个区间中取出n个数,相加的和一共会出现多少种结果. 题目分析:对于这种挑选数字相加,由于每一步不同的 ...

  5. 牛客练习赛22-E.简单数据结构1(扩展欧拉定理降幂 +树状数组)

    链接:E.简单数据结构1 题意: 给一个长为n的序列,m次操作,每次操作: 1.区间加 2.对于区间,查询 ,一直到- 请注意每次的模数不同.   题解:扩展欧拉定理降幂 对一个数p取log(p)次的 ...

  6. 牛客练习赛40 A 小D的剧场 (思维dp)

    链接:https://ac.nowcoder.com/acm/contest/369/A 题目描述 若你摘得小的星星 你将得到小的幸福  若你摘得大的星星 你将得到大的财富  若两者都能摘得 你将得到 ...

  7. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  8. 牛客练习赛22C Bitset

    牛客练习赛22C 一共有 n个数,第 i 个数是 xi  xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 感觉二进制真是一个神奇的东西. #include <iost ...

  9. [堆+贪心]牛客练习赛40-B

    传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费  x_i 的时间,同时完成第 i 个任务的时间不 ...

随机推荐

  1. LeetCode--292--Nim游戏

    问题描述: 你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函 ...

  2. 20171026python读取txt写入csv

    import csv def get_lines(filepath): with open(filepath) as file_object: lines=set(file_object.readli ...

  3. apiCloud 三方分享,微信好友分享,微信朋友圈分享,QQ分享,微博分享

    首先查看我的这篇有关三方登录的博客,地址是http://www.cnblogs.com/gqx-html/p/8303567.html,配置完三方数据后可以从上一篇文章中的链接跳转到各个登录查看api ...

  4. lvalue require as increment operand

    #include<stdio.h> #include<stdlib.h> int main() { char source[]="hello"; //创建一 ...

  5. 2015-2016 ACM-ICPC, NEERC, Moscow Subregional Contest J - Jealousy

    题意:有n张照片,每张照片上有一些妹子,要按照片顺序给妹纸安排男朋友,如果妹纸i安排的男朋友之前有女朋友,那么费用+wi,求总费用最小,和输出路径 题解:费用流,先把照片天数建点i连i+1,流量k(最 ...

  6. hpu_newoj_1028-exgcd

    The Elevator   描述 全是电梯. Philo正处于高度为0的一个平台上,在他面前的一个平面,全是上上下下的电梯. Philo想要离开这里,请你帮帮他. 电梯世界规则:这里的电梯所能到达的 ...

  7. css 使用率 清楚无用css

  8. python模块安装注意事项

    在安装python的第三方模块时,需要注意路径问题. 1.如果python是按默认位置安装的,则可以直接在命令提示符中进行安装,即pip install module_name. 2.如果python ...

  9. ORA-01034: ORACLE not available ORA-27101

    出现ORA-01034和ORA-27101的原因是多方面的:主要是oracle当前的服务不可用,shared memory realm does not exist,是因为oracle没有启动或没有正 ...

  10. 第2天【OS Linux发行版介绍、Linux系统基础使用入门、Linux命令帮助、Linux基础命令】

    Logout    退出系统 Gedit     文本编辑器工具 Uname –r 查看内核版本信息,uname –a 比较详细 Cat /proc/cpuinfo      查看CPU Cat /p ...