题目:
一共有 n个数,第 i 个数是 xi
xi 可以取 [li , ri] 中任意的一个值。
设 ,求 S 种类数。
1 ≤ n , li , ri ≤ 100
做法:
建个1e6的bitset。从1到n枚举每个数的取值。用bitset左移k位表示前面能表示的所有数+k。就这样直接暴力就行了。
代码:
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
#define debug(a) cout << #a ": " << a << endl
using namespace std;
typedef long long ll;
const int N = 1e6 + 7;
bitset<N> ans, tmp, zero;
int main(void){
IOS;
int n; cin >> n;
ans[0] = 1;
for (int i = 1; i <= n; ++i){
int l, r; cin >> l >> r;
tmp = ans; ans = zero;
for (int j = l; j <= r; ++j){
ans |= (tmp << (j*j));
}
}
int cnt = 0;
for (int i = 0; i < N; ++i){
if (ans[i] == 1) cnt++;
}
cout << cnt << endl;
return 0;
}
京公网安备 11010502036488号