(HDU)1251
来源:互联网 发布:oracle数据库to date 编辑:程序博客网 时间:2024/06/14 11:17
统计难题
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 38204 Accepted Submission(s): 14031
Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
注意:本题只有一组测试数据,处理到文件结束.
Output
对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input
bananabandbeeabsoluteacmbabbandabc
Sample Output
2310
Author
Ignatius.L
我的代码:
#include <bits/stdc++.h>using namespace std;struct node{ int next[26]; int cnt; void init() { cnt=0; memset(next,-1,sizeof(next)); }}T[1000000];char s[1000];int tot;void insert(char* s){ int i,p=0,len=strlen(s); for(i=0;i<len;i++) { int x=s[i]-'a'; if(T[p].next[x]==-1) { T[tot].init(); T[p].next[x]=tot++; } p=T[p].next[x]; T[p].cnt++; }}int query(char *s){ int i,p=0,len=strlen(s); for(i=0;i<len;i++) { int x=s[i]-'a'; if(T[p].next[x]==-1) { T[tot].init(); T[p].next[x]=tot++; } p=T[p].next[x]; } return T[p].cnt;}int main(){ T[0].init(); tot=1; while(gets(s)&&s[0]){insert(s);} while(gets(s)){ printf("%d\n",query(s));} return 0;}
/************HDU 1251 统计难题字典树模板 **************/#include<stdio.h>#define MAX 26typedef struct TrieNode{ int nCount; struct TrieNode *next[MAX];}TrieNode;TrieNode Memory[1000000];int allocp=0;void InitTrieRoot(TrieNode **pRoot){ *pRoot=NULL;} TrieNode *CreateTrieNode(){ int i; TrieNode *p; p=&Memory[allocp++]; p->nCount=1; for(i=1;i<MAX;i++) { p->next[i]=NULL; } return p;} void InsertTrie(TrieNode **pRoot,char *s){ int i,k; TrieNode *p; if(!(p=*pRoot)) p=*pRoot=CreateTrieNode(); i=0; while(s[i]) { k=s[i++]-'a'; if(p->next[k]) p->next[k]->nCount++; else p->next[k]=CreateTrieNode(); p=p->next[k]; } } int SearchTrie(TrieNode **pRoot,char *s){ TrieNode *p; int i,k; if(!(p=*pRoot)) return 0; i=0; while(s[i]) { k=s[i++]-'a'; if(p->next[k]==NULL) return 0; p=p->next[k]; } return p->nCount;} int main(){ char str[11]; TrieNode *Root=NULL; InitTrieRoot(&Root); while(gets(str)&&str[0]) { InsertTrie(&Root,str); } while(gets(str)) { printf("%d\n",SearchTrie(&Root,str)); } return 0;}
#include<stdio.h>#include<string.h>struct Node{ struct Node *br[26]; int num;};Node *head;void Tree_insert(char str[])//插入单词 { Node *t,*s=head; int i,j; int len=strlen(str); for(i=0;i<len;i++) { int id=str[i]-'a'; if(s->br[id]==NULL) { t=new Node; for(j=0;j<26;j++) { t->br[j]=NULL; } t->num=0; s->br[id]=t; } s=s->br[id]; s->num++; } } int Tree_Find(char str[]){ Node *s=head; int count,i; int len=strlen(str); for(i=0;i<len;i++) { int id=str[i]-'a'; if(s->br[id]==NULL) { return 0; } else { s=s->br[id]; count=s->num; } } return count;} int main(){ int i; head=new Node; for(i=0;i<26;i++) { head->br[i]=NULL; head->num=0; } char str[12]; while(gets(str)&&str[0]) Tree_insert(str); while(gets(str)) printf("%d\n",Tree_Find(str)); return 0;}
0 0
- hdu 1251+hdu 1671(字典树)
- (HDU)1251
- hdu 1251 (字典树)
- hdu 1251 (Trie 树)
- hdu 1251
- hdu 1251
- HDU 1251
- hdu 1251
- HDU-1251
- HDU 1251
- hdu 1251
- hdu-1251
- hdu 1251
- HDU 1251
- HDU 1251
- hdu 1251
- HDU 1251
- hdu 1251
- 蓝桥杯
- 如何快速部署国人开源的 Java 博客系统 Tale
- 机器学习sklearn knn
- 欢迎使用CSDN-markdown编辑器
- MySQL的Master-Slave复制配置步骤
- (HDU)1251
- C#安卓自学示例(4)基础知识
- Linux内核log等级与printk打印消息控制
- 大话数据结构之:冒泡排序
- liunx查看当前用户标示及组成员资格
- 1276: QAQ and steel ball discs
- swift 枚举
- 操作结果集
- loadrunner入门篇-Vuser发生器