hdu 5972 Regular Number

题意:给出一个n,有n个表达式,开头是x,代表个数,第i位能位这x个字符,给出个字符串,问有哪些符合要求的字符串

思路:bitset,我们对于每个字符串他可以匹配哪些位,然后对于那个字符串,如果该位匹配,则右移一位,所以如果该位为1代表前这么多位都是匹配的

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N=1002;
 5 bitset<N > a[11],ans;
 6 char s[5000006];
 7 
 8 int main(){
 9     int n,m,x;
10     scanf("%d",&n);
11     for(int i=0;i<n;i++){
12         scanf("%d",&m);
13         for(int j=1;j<=m;j++){
14             scanf("%d",&x);
15             a[x][i]=1;
16         }
17     }
18     scanf("%s",s);
19     int l=strlen(s);
20     for(int i=0;i<l;i++){
21         ans<<=1;
22         ans[0]=1;
23         ans&=a[s[i]-'0'];
24         if(ans[n-1]==1){
25             char temp=s[i+1];
26             s[i+1]='';
27             puts(s+i-n+1);
28             s[i+1]=temp;
29         }
30     }
31 }
原文地址:https://www.cnblogs.com/hhxj/p/7614801.html