[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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章