DP+bitset

 HDU5716

dp[i][j] = dp[i-1][j-1] && (s[i] in set[j]); 第二维压bitset

 1 #include <bits/stdc++.h>
 2 #define X first
 3 #define Y second
 4 #define mp make_pair
 5 #define pii pair<int, int>
 6 #define gg puts("gg");
 7 using namespace std;
 8 const int N = 2e6+5;
 9 int id(char c){
10     if(c >= '0'&& c <= '9') return c-'0';
11     if(c >= 'a'&& c <= 'z') return c-'a'+10;
12     if(c >= 'A'&& c <= 'Z') return c-'A'+36;
13     return -1;
14 }
15 char s[N], t[70];
16 bitset<505> se[70], dp;
17 int main(){
18     while(gets(s+1)){
19         for(int i = 0; i < 70; i++) se[i].reset();
20         dp.reset();
21         int m, n; scanf("%d", &n);
22         for(int i = 1; i <= n; i++){
23             scanf("%d", &m);
24             scanf(" %s", t);
25             for(int j = 0; t[j]; j++)
26                 se[ id(t[j]) ].set(i);
27         }
28         dp.set(0);
29         bool tag = true;
30         for(int i = 1; s[i]; i++){
31             if(id(s[i]) >= 0)
32                 dp = (dp<<1)&se[ id(s[i]) ];
33             else
34                 dp.reset();
35             dp.set(0);
36             if(dp.test(n))
37                 tag = false, printf("%d\n", i-n+1);
38         }
39         if(tag) puts("NULL");
40         getchar();
41     }
42     return 0;
43 }
View Code

相关文章:

  • 2021-09-05
  • 2021-06-13
  • 2021-07-28
  • 2022-01-21
  • 2021-12-07
  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
猜你喜欢
  • 2022-12-23
  • 2022-01-24
  • 2022-02-25
  • 2022-12-23
  • 2021-11-22
  • 2021-08-26
  • 2021-07-04
相关资源
相似解决方案