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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj 1451(Trie)

發(fā)布時間:2025/3/16 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 1451(Trie) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:就是讓你模擬手機(jī)輸入單詞。具體就是給你一些單詞,以及該單詞被使用的頻數(shù),這個頻數(shù)也是該單詞前綴的使用頻數(shù),當(dāng)然不同的單詞有可能有相同的前綴,那么這個相同的前綴的使用頻數(shù)就是這兩個單詞使用頻數(shù)之和,以此類推。然后再給你一些數(shù)字串,讓你針對該數(shù)字串的每一個前綴輸出它的最有可能對應(yīng)的單詞(即頻數(shù)最大的字符串)。


解題思路:這道題目比我想象中的簡單,直接dfs去搜,因為每個鍵的字母個數(shù)不超過5,所以不會TLE。。。


#include<iostream> #include<cstdio> #include<cstring> using namespace std;struct node {struct node *next[26];int p;node(){p = 0;for(int i = 0; i < 26; i++)next[i] = NULL;} }; int n,pro; char s[100],keyboard[10][5]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; char ans[100],tmp[100];void add(char *str,int cnt,node *root) {node *t = root;for(int i = 0; str[i] != 0; i++){if(t->next[str[i]-'a'] == NULL){t->next[str[i]-'a'] = new node();}t = t->next[str[i]-'a'];t->p += cnt;} }void dfs(int x,int pos,node *r) {int num = s[pos] - '0';int len = strlen(keyboard[num]);for(int i = 0; i < len; i++){int t = keyboard[num][i] - 'a';if(r->next[t] == NULL) continue;else tmp[pos] = keyboard[num][i];if(pos == x){if(pro < r->next[t]->p){pro = r->next[t]->p;strcpy(ans,tmp);}}else dfs(x,pos+1,r->next[t]);} }int main() {int t,p,cas = 1;node *root;scanf("%d",&t);while(t--){root = new node();scanf("%d",&n);for(int i = 1; i <= n; i++){getchar();scanf("%s %d",s,&p);add(s,p,root);}printf("Scenario #%d:\n", cas++);scanf("%d",&n);for(int i = 1; i <= n; i++){getchar();scanf("%s",s);int len = strlen(s);for(int j = 0; j < len-1; j++){memset(tmp,0,sizeof(tmp));pro = 0;dfs(j,0,root);if(pro == 0)printf("MANUALLY\n\n");else printf("%s\n\n",ans);}}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的poj 1451(Trie)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。