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]='\0'; 27 puts(s+i-n+1); 28 s[i+1]=temp; 29 } 30 } 31 }