[NOI Online入门组]#3 最急救助

题目描述

救助中心每天都要收到很多求救信号。收到求救信号后,救助中心会分析求救信号,找出最紧急的求救者给予救助。求救信号是一个由小写英文字母组成的字符串,字符串中连续三个字符依次组成"sos"的情况越多(即包含子串"sos"的数目越多),代表着求救者情况越紧急。现在请你帮助救助中心找出最紧急的求救者。注意字符串中包含的"sos"可以有重叠,例如"sosos"算作包含 2 个"sos"。

输入

第一行一个整数 n,表示求救者的数目。
接下来有 2n 行,每行一个由小写英文字母组成的字符串。这 2n 行中,第 2i−1(1≤i≤n)行的字符串表示第 i 个求救者的名字,第 2i 行的字符串表示第 i 个求救者的求救信号。

输出

输出共两行,第一行是最紧急求救者的名字。如果最紧急求救者有多个,则按照输入的顺序将他们的名字依次输出,相邻两个名字间用空格分隔。第二行一个整数,表示最紧急求救者的求救信号中包含有多少个"sos"子串。

样例输入

样例输入1

2
adam
ineedhelpsosineedhelpsos
mark
ineedmorehelpsoshelpmesossoshelpme 

样例输入2

3
susan
sosososososos
jack
sossossossos
allen
soshelpsossossossossos

样例输出

样例输出1

mark
3

样例输出2

susan allen
6

数据范围限制

对于 10% 的数据,n=1。
对于所有数据,n≤100,求救者名字长度不超过 20,求救信号长度不超过 200。

分析:

很简单的字符串处理 注意有多个最紧急求助者

CODE:

#include<cmath>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
struct peo{  //结构体
	char name[21];
	char str[201];
	int cnt;
}a[101];
int n,maxn=-999; 
int main(){
	freopen("save.in","r",stdin);
	freopen("save.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		cin>>a[i].name>>a[i].str;
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<strlen(a[i].str);j++)
		{
			if(a[i].str[j]=='s'&&a[i].str[j+1]=='o'&&a[i].str[j+2]=='s') a[i].cnt++;  
		}  //判断sos,计数
	}
	for(int i=1;i<=n;i++){
		if(maxn<a[i].cnt) maxn=a[i].cnt; //最大数量 
	}
	for(int i=1;i<=n;i++){
		if(a[i].cnt==maxn){
			cout<<a[i].name<<" ";  //匹配就输出
		}
	}
	cout<<endl;
	cout<<maxn;
	
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章