閱讀825 返回首頁    go 人物


NYOJ290-動物統計加強版

動物統計加強版
時間限製: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

 

思路:平常的排序方式已經無法解決,隻能用字典樹來解決,一直不想看字典樹的,因為和麵向對象有關係,今天還是硬著頭皮做了,沒自己

想像的那麼難理解(還好我是學JAVA的),看了網上的模板,揣摩了一番,模仿著寫出來了

AC代碼:
(可以當做字典樹模板)

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
       node *next[26];//node類的26個子類 
       int count;//每一個類終端的個數 
       node(){//構造函數,用來初始化數據 
              memset(next,0,sizeof(next));
              count=0; 
       }
};
int MAX;//用來記錄最出現次數 
char flag[20]; //用來記錄出現次數最多的字符串
node *root=new node();//聲明一個初始node類 (這個類決定了以下所有子類,是字典樹的根) 
void insert(char *s) //插入新的字符串 
{
     node *p=root;
     int i,k;
     for(i=0;s[i];i++){
         k=s[i]-'a';
         if(p->next[k]==NULL) p->next[k]=new node();//不存在此節點則創建
         p=p->next[k];//移向下一個節點              
     }
     p->count++;
     if(p->count>MAX){//更新MAX和flag 
        MAX=p->count;
        strcpy(flag,s);
     }
} 
int main()
{
    int n;
    char s[15];
    scanf("%d",&n);
    while(n--)
    {
       scanf("%s",s);
       insert(s);
    }
    printf("%s %d\n",flag,MAX);
    return 0;
}

最後更新:2017-04-03 12:56:30

  上一篇:go Oracle中的記錄(Record)
  下一篇:go UVA 之11300 - Spreading the Wealth