(寒假马拉松 第二场 B题)
字符串处理
题意:
判断最后一个字符串是否可以组成前面的字符串,输出可以组成的数量,‘_’代表可以任意字母。
In the first test case, PIZZA
, ZA
and PITA
can be spelled as PIZ_A
, ZA
and PI_A
. There are not enough letters to spell PROGRAM
or CONTEST
. In the second test case, BANANAS
and FIGS
can be spelled as _A_A_A_
and____
. On the other hand, CARROTS
would require 6 blanks in addition to the A
.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
char s1[1005][10],s2[10],s3[10];
int main(){
int n,num,sum,len,cnt,a,i,j,k;
while(~scanf("%d",&n)&&n){
num=sum=j=cnt=0;
for(i=0;i<n;i++)
scanf("%s",s1[i]);
scanf("%s",s2);
len=strlen(s2);
for(i=0;i<len;i++)
if(s2[i]=='_')
num++;
else
s3[j++]=s2[i];
s3[j]='\0';
//for(i=0;i<strlen(s2);i++)printf("%c",s2[i]);puts("");for(i=0;i<strlen(s3);i++)printf("%c",s3[i]);puts("");
//printf("%d\n",len);
for(i=0;i<n;i++){
len=strlen(s1[i]);
for(k=0;k<j;k++)
for(a=0;a<len;a++){
//printf("a: %d ",a);
if(s3[k]==s1[i][a]){
s1[i][a]='.';
cnt++;
break;
}
}
if(cnt<=j && (len-cnt)<=num)
sum++;
cnt=0;
}
printf("%d\n",sum);
}
return 0;
}