nyoj 290 動物統計加強版 (字典樹 PS:map<TLE>)
阿新 • • 發佈:2018-05-03
輸入 實現 lan span amp == spl can hdu
動物統計加強版
時間限制: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
/** PS:這道題第一反應就是用map但用map提交兩次都超時?????? 數據結構:字典樹 **/
模板 struct node、 void my_insert(char *s)、 root:
1 struct node 2 { 3 node *next [26]; 4 int cnt; 5 node () 6 { 7 cnt = 0; 8 memset (next, 0
C/C++代碼實現(AC):
#include <bits/stdc++.h> using namespace std; int n, my_max = -1; char temp [15], ans [15]; struct node { node *next [26]; int cnt; node () { memset (next, 0, sizeof (next)); cnt = 0; } }; node *root = new node(); // new 與 malloc 類似都是開辟內存空間的意思 void my_resert (char *s) { node *p = root; int i, k, len = strlen (s); for (i = 0; i < len; ++ i) { k = s [i] - ‘a‘; if (p->next [k] == NULL) p->next [k] = new node(); p = p->next [k]; } p->cnt ++; if (p->cnt > my_max) { my_max = p->cnt; strcpy (ans, s); } return ; } int main() { scanf ("%d", &n); while (n --) { scanf ("%s", temp); my_resert (temp); } printf ("%s %d", ans, my_max); return 0; }
hdu 1251 統計難題 http://acm.hdu.edu.cn/showproblem.php?pid=1251
nyoj 290 動物統計加強版 (字典樹 PS:map<TLE>)