2020寒假【gmoj2403】【单词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”.

分析

首先仔细看看就可以发现这题是可以不分大小写的,判断的时候注意。其他的直接暴力枚举每一个串,每一个好名字。因为每一个好名字对于每一个串的贡献最多是1,所以直接每一个字符比对即可。
注意:用char,还有先算好长度存起来,加上卡常才不会超时!

上代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;
char a[1001][1001],g[101][1001],ff[1001];
int main()
{
    freopen("word.in","r",stdin);
    freopen("word.out","w",stdout);
    scanf("%d%d",&n,&m);
    getchar();
    for(register int i=1;i<=n;i++)
    {
    	scanf("%s",&a[i]);
	}
	for(register int i=1;i<=m;i++)
	{
		scanf("%s",&g[i]);
	}
	for(register int i=1;i<=n;i++)
	{
		int ans=0;
		for(register int j=1;j<=m;j++)
		{
			int s=0,len=strlen(a[i]),len1=strlen(g[j]);
			for(register int k=0;k<=len-1;k++)
			{
				if(a[i][k]==g[j][s]||abs(a[i][k]-g[j][s])==32)
				{
					s++;
				}
				if(s==len1) 
				{
					ans++;break;
				}
			}
		}
		cout<<ans<<endl;
	}
	fclose(stdin);
	fclose(stdout);
    return 0;
}

发布了110 篇原创文章 · 获赞 100 · 访问量 8024

猜你喜欢

转载自blog.csdn.net/dglyr/article/details/104906069
今日推荐