hdu 2072-单词数(字典树)
来源:互联网 发布:蓝月传奇10转生数据 编辑:程序博客网 时间:2024/06/05 07:50
address:http://acm.hdu.edu.cn/showproblem.php?pid=2072
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
题目做的很难受,本来 好简单 用string类型传参前注意到 字符串末尾不处理的话 最后一个单词 就不会录入做判断 ,所以在原字符串后加’ ’ ,所以多扫描一位
各种改 交了10几次 都是错的 不得不用 char类型字符串每次更改末尾了 但我觉得 我对string类型的 处理没错 , 错误代码 贴到第二个 希望某位大佬能指出错误
string 类型的 错误已经找到了 是最后数组没清零 清一下 就好 ,分析就不删了 当反思
正确代码
#include <iostream>#include <bits/stdc++.h>using namespace std;const int maxn = 1e6+10;int sum;struct node{ int t; node * child[26]; node() { t = 0; for (int i=0; i<26; i++) { child[i] = NULL; } }};node *root;int flag;void build(char* a){ //cout<<a<<endl; node *p; node * newnode; int i; p = root; for (i=0; i<strlen(a); i++) { int m = a[i]-'a'; if (p->child[m]==NULL) { newnode = new node; p->child[m] = newnode; } p = p->child[m]; } if (p->t==0) { sum++; p->t=1; }}void ended(node *head) //删除字典树{ for (int i=0; i<26; i++) { if (head->child[i]!=NULL) ended(head->child[i]); } delete head;}int main(){ char s[maxn]; char s2[maxn]; while (gets(s) && strcmp(s, "#")) { root = new node; int i, j, top = 0; sum= 0; for (i = 0; i <= strlen(s); i++) { if (s[i] >= 'a' && s[i] <= 'z') s2[top++] = s[i]; else { if (top != 0) {s2[top] = '\0'; top = 0; build(s2);} } } printf("%d\n", sum); } return 0;}
用 string 存储
#include <iostream>#include <bits/stdc++.h>using namespace std;const int maxn = 1e6+10;int sum;struct node{ int t; node * child[26]; node() { t = 0; for (int i=0; i<26; i++) { child[i] = NULL; } }};node *root;int flag;void build(string a){ //cout<<a<<"@"<<endl; node *p; node * newnode; int i; p = root; for (i=0; i<a.length(); i++) { int m = a[i]-'a'; if (p->child[m]==NULL) { newnode = new node; p->child[m] = newnode; } p = p->child[m]; } if (p->t==0) { sum++; p->t=1; }}void ended(node *head) //删除字典树{ for (int i=0; i<26; i++) { if (head->child[i]!=NULL) ended(head->child[i]); } delete head;}int main(){ char a[maxn]; sum=0; while (gets(a)&& strcmp(a, "#")) { sum=0; root = new node; string gd=""; //cout<<strlen(a)<<endl; a[strlen(a)]=' '; for (int i=0; i<strlen(a); i++) { //cout<<a[i]<<"!!!!!"<<endl; if (a[i]>='a'&&a[i]<='z') gd += a[i]; else if (gd!="") { build(gd); gd = ""; } } cout<<sum<<endl; //getchar(); ended(root); memset(a,0,sizeof(a)); } return 0;}
阅读全文
0 0
- hdu 2072 单词数(字典树)
- hdu 2072 单词数 字典树
- HDU 2072 单词数 字典树
- hdu 2072 单词数 字典树
- hdu 2072-单词数(字典树)
- hdu-2072-单词数(字典树)
- hdu 题目2072 单词数 (字典树)
- hdu 2072 单词数(字典树入门题)
- hdu 2846 【字典树】单词子串的匹配数
- 单词数(hdu2072字典树)
- 单词数 (HDU_2072) 字典树
- HDU 2072 单词数
- hdu 2072 单词数
- hdu 2072 单词数
- HDU 2072 单词数
- HDU 2072 单词数
- Hdu 2072 - 单词数
- Hdu 2072 单词数
- HTTP详解(十四):非对称加密算法正传
- $.each jquery遍历 demo
- A
- Intellij IDEA Scala开发环境搭建
- ubuntu命令
- hdu 2072-单词数(字典树)
- [torch]nngraph parameters of the node
- 通过反射取得hashmap的值
- icp前端问题
- stoner pipeline simular v9.5(SPS)输气管道仿真软件_USB硬件加密锁运行稳定\
- mysql分库分表
- 利用cell中删除键位置来确定删除对应数据
- 西安集训第六天-----一般的数据结构知识
- 离线安装Chrome Postman 插件