Pagini recente » Cod sursa (job #2170268) | Cod sursa (job #2815075) | Cod sursa (job #1546571) | Cod sursa (job #374557) | Cod sursa (job #1350335)
#include<cstdio>
#include<cstring>
const int M=200000;
const int N=100;
const int L=5000;
char q[M+1];
char s[N+1][L+1];
short int d[L+1][27];
short int st[M+1];
char res[M+1];
int noq,n;
void dp(int p){
int l=strlen(s[p]);
for(int i=1;i<=L;i++)
for(int j=1;j<=26;j++)
d[i][j]=-1;
for(int i=l-1;i>=0;i--){
for(int j=1;j<=26;j++)
if(s[p][i+1]-'a'+1==j)
d[i][j]=i+1;
else
d[i][j]=d[i+1][j];
}
}
int main(){
freopen("research.in","r",stdin);
freopen("research.out","w",stdout);
scanf("%d%d\n",&n,&noq);
for(int i=1;i<=n;i++){
gets(s[i]);
int l=strlen(s[i]);
for(int j=l;j>=1;j--)
s[i][j]=s[i][j-1];
}
for(int i=1;i<=noq;i++)
scanf("%c\n",&q[i]);
for(int j=1;j<=n;j++){
dp(j);
int l=0;
int p=0;
for(int i=1;i<=noq;i++){
if(q[i]=='-')
p=st[--l];
else{
if(p!=-1)
p=d[p][q[i]-'a'+1];
st[++l]=p;
}
if(p>0)
res[i]++;
}
}
for(int i=1;i<=noq;i++)
printf("%d\n",res[i]);
return 0;
}