//
动物统计加强版
时间限制:
3000
ms | 内存限制:
150000
KB
难度:
4
-
描述
-
在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙。
-
输入
-
第一行输入动物名字的数量N(1<= N <= 4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。
输出
-
输出这些动物中最多的动物的名字与数量,并用空格隔开(数据保证最多的动物不会出现两种以上)。
样例输入
-
10 boar pig sheep gazelle sheep sheep alpaca alpaca marmot mole
样例输出
-
sheep 3
来源
- [陈玉 张云聪]原创 上传者
- 陈玉
-
第一行输入动物名字的数量N(1<= N <= 4000000),接下来的N行输入N个字符串表示动物的名字(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。
C/C++版
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//树结构定义
typedef struct node
{
int count;
struct node *next[26];
}tree;
tree *head;
char ch[12];//保存出现次数最多的动物名称
int num;//保存出现次数最多的动物次数
//建树
void insert(char *a)
{
int i,j,len;
tree *b,*c;
b=head;
len=strlen(a);
for(i=0;i<len;i++)
{
if(b->next[a[i]-'a']==NULL)//出现新字符
{
c=(tree *)malloc(sizeof(tree));//生成新节点
b->next[a[i]-'a']=c;
b = b->next[a[i]-'a'];
//新节点初始化
b->count=0;
for(j=0;j<26;j++)
b->next[j]=NULL;
}
else
b = b->next[a[i]-'a'];
}
b->count++;
if(num<b->count)//比较次数
{
num=b->count;
strcpy(ch,a);
}
}
int main()
{
int i,n;
char a[12];
scanf("%d",&n);
//初始化
num=0;
head = (tree *)malloc(sizeof(tree));
for(i=0;i<26;i++)
head->next[i]=NULL;
while(n--)
{
scanf("%s",a);
insert(a);
}
printf("%s %d\n",ch,num);
// system("pause");
return 0;
}
java版
import java.io.*;
import java.util.*;
public class Main {
static int Max = 1;
static String Mnode,str;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashMap<String,Integer> map = new HashMap<String,Integer>();
int n = Integer.parseInt(br.readLine());
while(n-->0){
str = br.readLine();
if(!map.containsKey(str))
map.put(str, 1);
else{
int i = map.get(str)+1;
map.put(str, i);
if(Max<i){
Max = i;
Mnode = str;
}
}
}
System.out.println(Mnode+" "+Max);
}
}