題目描述
救助中心每天都要收到很多求救信號。收到求救信號後,救助中心會分析求救信號,找出最緊急的求救者給予救助。求救信號是一個由小寫英文字母組成的字符串,字符串中連續三個字符依次組成"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;
}