日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 1251 统计难题 字典树/STL

發布時間:2025/7/25 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 1251 统计难题 字典树/STL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
統計難題 Time Limit:2000MS?????Memory Limit:65535KB?????64bit IO Format:%I64d & %I64u

Description

Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重復的單詞出現),現在老師要他統計出以某個字符串為前綴的單詞數量(單詞本身也是自己的前綴).?

Input

輸入數據的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的單詞,一個空行代表單詞表的結束.第二部分是一連串的提問,每行一個提問,每個提問都是一個字符串.?

注意:本題只有一組測試數據,處理到文件結束.?

Output

對于每個提問,給出以該字符串為前綴的單詞的數量.?

Sample Input

banana band bee absolute acm ba b band abc

Sample Output

2 3 1 0 第一種是普通的字典樹做法 網上找了個模板 ?指針這東西真是玄學啊? #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> using namespace std; #define INF 0x3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1typedef long long LL;struct node {int count;node *childs[26];node(){count=0;for(int i=0;i<26;i++)childs[i]=NULL;} };node *root=new node; node *current,*newnode;void insert(char *str) {int m;int len=strlen(str);current=root;for(int i=0;i<len;i++){m=str[i]-'a';if(current->childs[m]!=NULL){current=current->childs[m];++(current->count);}else{newnode=new node;++(newnode->count);current->childs[m]=newnode;current=newnode;}} }int search(char *str) {int m;current=root;int len=strlen(str);for(int i=0;i<len;i++){m=str[i]-'a';if(current->childs[m]==NULL)return 0;current=current->childs[m];}return current->count; }int main() {//freopen("input.txt","r",stdin);char str[26];while(gets(str)){int len=strlen(str);if(len==0)break;insert(str);}while(gets(str)!=NULL){printf("%d\n",search(str));} }

  

?

然后再來說說神奇的map

仰望高端玄學

#include <iostream> #include <cstdio> #include <map> #include <string.h> using namespace std;char str[25];int main() {//freopen("input.txt","r",stdin);map<string,int> m;while(gets(str)){int len=strlen(str);if(len==0)break;for(int i=len;i>0;i--){str[i]='\0';m[str]++;}}while(gets(str)){printf("%d\n",m[str]);} }

  

?

轉載于:https://www.cnblogs.com/Hyouka/p/5716467.html

總結

以上是生活随笔為你收集整理的HDU 1251 统计难题 字典树/STL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。