HDU——1251 统计难题
来源:互联网 发布:vmware10 for mac下载 编辑:程序博客网 时间:2024/06/05 15:26
题意:这次是中文自己看。
解题思路:要用到字典树(研究了好几天的字典树,终于算是知道字典树大概写法了),详细的解释看代码注释。
Code:
#include <iostream>#include <cstring>#include <cstdio>using namespace std;struct Trie{ Trie *next[26];//用于存放子节点的地址 int v;//记录以该节点为根的树叶子节点的个数};Trie *root;//根节点Trie *newnode()//初始化每个新节点{ Trie *t; t = new Trie; for(int i = 0; i < 26; i++) t->next[i] = NULL; return t;}void CreatTrie(char *str)//创建字典树{ Trie *q, *p = root; int len = strlen(str); for(int i = 0; i < len; i++) { int id= str[i]-'a';//得出i节点的编号 if(p->next[id] == NULL)//如果第id个节点为空,则创建新节点 { q = newnode(); q->v = 1;//并且将以该节点为根的树的叶子节点个数初始化为1 p->next[id] = q; p = p->next[id]; } else { p->next[id]->v++;//如果第id个节点不为空,则v++ p = p->next[id];//指针向下移动 } }}int search(char *str){ Trie *p = root; int len = strlen(str); for(int i = 0; i < len; i++) { int id = str[i] - 'a'; p = p->next[id];//每次都先进行移动,然后进行判断 if(p == NULL) return 0;//若为空,则直接跳出 } return p->v;//最后返回p结点的v值}int main(){ //freopen("input.txt","r",stdin); char array[26]; int flag = 1;//首先设置一个标识变量 root = newnode(); while(gets(array)) { int len = strlen(array); if(len == 0) { flag = 0; continue; }//利用空行的长度来进行由CreatTrie()到search()的切换 if(flag) CreatTrie(array); else { int num = search(array); printf("%d\n",num); } } return 0;}
0 0
- 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统计难题
- hdu 1251统计难题
- hdu 1251 统计难题
- HDU 1251 统计难题
- hdu 1251统计难题
- 北京华健面试题答案(oracle)
- Cocos2d-x中__Dictionary容器的使用详解
- error C2011: “Shape”:“class”类型重定义 问题的解决
- memberCache java客户端的使用
- Android自定义视图(一):带下划线的TextView
- HDU——1251 统计难题
- poj1002
- zoj 3823 Excavator Contest(构造)
- 第七周编程——员工周工资计算
- 某大神网站发现2048一枚
- MFC 获取当前路径
- vc创建自定义按钮
- MZ Training 2014 #8 F题
- grub for qemu