简单瞎搞题(bitset暴力)

简单瞎搞题

https://ac.nowcoder.com/acm/problem/17193


题目:

一共有 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;
}
全部评论

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务