bitset入门 简单瞎搞题

链接:https://ac.nowcoder.com/acm/contest/132/C?&headNav=www
来源:牛客网

简单瞎搞题
时间限制:C/C++ 1秒,其他语言2秒
空间限制: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 }
原文地址:https://www.cnblogs.com/letlifestop/p/11008098.html