题目:

一共有 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;
}