bitset用法

bitset:基本功能就是将一个数改为其二进制的形式

 

基于此特点有以下优化:

1.二维bool数组优化为bitset:

  https://www.luogu.com.cn/problem/P3879

复制代码
 1 # include<iostream>
 2 # include<bits/stdc++.h>
 3 using namespace std;
 4 # define int long long
 5 # define endl "\n"
 6 const int N = 5e5+5, M = 1e4 + 10;
 7 
 8 int nex[500090][26], cnt;
 9 bitset<1001> exist[300000];
10 int n;
11 char s[1010];
12 void insert(char *s, int i) {
13     int p = 0;
14     for (int i = 0; s[i]; ++i) {
15         int c = s[i] - 'a';
16         if (!nex[p][c]) nex[p][c] = ++cnt;
17         p = nex[p][c];
18     }
19     exist[p][i] = 1;
20 }
21 
22 void find(char *s) {
23     int p = 0;
24     bool ok = true;
25     for (int i = 0;s[i]; ++i) {
26         int c = s[i] - 'a';
27         if (!nex[p][c]) {
28             ok = false;
29             break;
30         }
31         p = nex[p][c];
32     }
33     if (ok) {
34         for (int i = 1; i <= n; ++i) {
35             if(exist[p][i]){
36                 cout<<i<<" ";
37             }
38         }
39         cout<<endl;
40     }
41     else {
42         cout<<" "<<endl;
43     }
44 
45 }
46 
47 void solve() {
48 
49     cin >> n;
50     for (int i = 1; i <= n; ++i) {
51         int len;
52         cin >> len;
53         for (int j = 1; j <= len; ++j) {
54             cin >> s;
55             insert(s, i);
56         }
57     }
58     int q;
59     cin >> q;
60     while (q--) {
61         cin>>s;
62         find(s);
63     }
64 }
65 int tt;
66 signed main() {
67     ios::sync_with_stdio(false);
68     cin.tie(0);
69     cout.tie(0);
70     tt = 1;
71 
72 
73 //    cin >> tt;
74     while (tt--)solve();
75 
76 
77     return 0;
78 }
View Code
复制代码

  数据范围本来是3e5*110的,加强数据后变为3e5*1100,如果只单纯的改bool数组为 exist[300010][1100]

  mel前十个数据,所以用bitset优化空间,因为是bool数组只看每一位是0或1,所以bitset完美代替

  大约节省为原来的1/32,具体的效果看题和测评机。

  bitset<1005> exist[300010];

posted @   empty_y  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示