2.单词(word)

题目描述

FJ想计算他的N(1<=N<=1000)只奶牛的名字的好听度,每个奶牛的名字是一个长度不超过1000的英文字母串。他创建了一个好名字的集合,数量为M(1<=M<=100),每个好名字的长度不超过30,奶牛的名字中每包含一个好名字(“包含”不一定要求连续),那么它的好听度就加1。所有的名字都不区分大小写,如名字“Bessie”包含“Be”、“sI”、“EE”、“Es”,但是不包含“eB”。
现在请你帮FJ计算每个奶牛名字的好听度。

输入

第1行: 2个用空格隔开的整数N 和 M;
第2…N+1行: 第i+1行为第i个奶牛的名字;
第N+2…N+M+1行:第N+i+1行为第i个好名字。

输出

第1…N行:第i个数为第i头奶牛名字的好听度。

样例输入

5 3
Bessie
Jonathan
Montgomery
Alicia
Angola
se
nGo
Ont

样例输出

1
1
2
0
1

提示

输入说明:FJ有5头奶牛,名字依次为"Bessie", “Jonathan”,“Montgomery”, Alicia"和"Angola",有3个好名字分别为"se","nGo"和 “Ont”.
输出说明: “Bessie” 包含 “se”, “Jonathan"包含"Ont”, "Montgomery"包含 “nGo” 、“Ont”,”Alicia“不包含任何好名字,“Angola"包含"nGo”.

正解
暴力下就OK了,注意要全转小写或大写哦
AC代码

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,x,a[1005];
string s1,str,s[1005];
int main()
{
   
	freopen("word.in","r",stdin);
	freopen("word.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
   
		cin>>s[i];
		str=s[i];
		for(int j=0;j<str.size();j++)//转大写
		 if(str[j]>='a')str[j]=str[j]-32;
		s[i]=str; 
	}
	for(int i=1;i<=m;i++)
	{
   
		cin>>s1;
		for(int j=0;j<s1.size();j++)//转大写
		 if(s1[j]>='a')s1[j]=s1[j]-32;
		for(int j=1;j<=n;j++)//暴力枚举每个字符串
		{
   
			str=s[j];
			x=0;
			for(int k=0;k<str.size();k++)//看是否含有好名字
			{
   
				if(str[k]==s1[x])x++;
				if(x==s1.size())break;//找到了就退出
			}	
			if(x==s1.size())a[j]++;//当前点累加
		}
	} 
	for(int i=1;i<=n;i++)//输出
	 cout<<a[i]<<endl;
	return 0;
}

下面附本次比赛的其它题目

2020.03.14模拟赛16(第一题)
2020.03.14模拟赛16(第二题)
2020.03.14模拟赛16(第三题)
2020.03.14模拟赛15(第四题)
2020.03.14模拟赛15(总结)

谢谢