bitset入门 简单瞎搞题
链接:https://ac.nowcoder.com/acm/contest/132/C?&headNav=www
来源:牛客网
简单瞎搞题
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
一共有 n个数,第 i 个数是 xi
xi 可以取 [li , ri] 中任意的一个值。
设 S=∑xi2S=∑xi2,求 S 种类数。具体思路:
bitset
0 0 0 1 1 这样在bitset中代表第一个数是存在的,第二个数是存在的(并不是二进制)。
然后每一次在上一次计算的基础上加上就好了。
1 #include<bits/stdc++.h> 2 #include<bitset> 3 using namespace std; 4 # define ll long long 5 # define LL_inf (1ll<<60) 6 # define inf 0x3f3f3f3f3 7 const int maxn = 1e6+20; 8 const int mod = 1e9+7; 9 bitset<maxn>ans; 10 bitset<maxn>tmp; 11 int main() 12 { 13 int n; 14 scanf("%d",&n); 15 int st,ed; 16 ans[0]=1; 17 for(int i=1; i<=n; i++) 18 { 19 scanf("%d %d",&st,&ed); 20 tmp.reset(); 21 for(int j=st; j<=ed; j++) 22 { 23 tmp|=ans<<j*j; 24 } 25 ans=tmp; 26 } 27 cout<<ans.count()<<endl; 28 return 0; 29 }