http://acm.hdu.edu.cn/showproblem.php?pid=1251
/*
第一次做字典树,找了一道比较简单的。
建树的时候用到了new动态分配内存,刚好学C++的时候老师讲到了这一点,动态内存有申请就要有释放。
但是在网上看了好多代码都没有清理内存。虽然能通过题目测试,但是却反映了一个编程态度的问题。
在此告诫自己,也希望大家都能端正自己的态度,不要为了AC而AC
*/
#include"iostream"
#include"cstring"
#include"cstdlib"
using namespace std;
//结点结构
struct Node
{
int ncount;
Node* Next[26];
};
Node* root;
//初始化结点
void Init(Node* t)
{
memset(t->Next,NULL,sizeof(t->Next));
t->ncount=0;
}
//插入新单词
void Insert(char* s)
{
int i,k;
Node* p=root;
Node* newnode;
for(i=0;i<strlen(s);i++){
k=s[i]-'a';
if(p->Next[k]==NULL){
newnode=new Node;
Init(newnode);
p->Next[k]=newnode;
p=newnode;
p->ncount++;
}
else{
p=p->Next[k];
p->ncount++;
}
}
}
//搜索单词
int Search(char* s)
{
int i,k;
Node* p=root;
for(i=0;i<strlen(s);i++){
k=s[i]-'a';
if(p->Next[k]==NULL)
return 0;
else
p=p->Next[k];
}
return p->ncount;
}
//释放内存
void Freedom(Node* p)
{
int i;
for(i=0;i<26;i++){
if(p->Next[i]!=NULL)
Freedom(p->Next[i]);
}
delete p;
}
int main()
{
char s[11];
root=new Node;
Init(root);
while(gets(s),s[0]!='\0'){
Insert(s);
}
while(gets(s)){
int ans=Search(s);
cout<<ans<<endl;
}
Freedom(root);
return 0;
}
分享到:
相关推荐
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
从简单入门到偏中等的几个题,线段树很灵活,主要懂了lazy操作,其他的自己yy吧。
Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。 这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。...
本人准备2020年保研机试时刷的题目(虽然最后机试取消了,...来自某中流985,在HDU和vjudge平台上大概刷了400道。本文件地图(excel表格)包含了绝大部分我刷过的题目,笔记中具有思路、代码、总结和心得。 大佬勿入!
ACM题库,一些题目和答案,以及解题报告,传上来共享
hdu 1166线段树
hdu 1166线段树代码
acm入门之枚举搜索,学校第一次acm培训,包括枚举及其优化,dfs和bfs
杭电OnlineJudge 200-2099的解题报告
2、new做两件事,一是分配内存,二是调用类的构造函数 3、new建立的是一个对象,而malloc分配的是一块内存 4、new/delete是保留字,不需要头文
hdu 3341(ac自动机+状态压缩) 题意:容易理解... 思路:首先一开始容易想到要用到dp,开设一个dp[41][41][41][41][501]的数组来解决,但是明显内存已经超出范围了,于是就想如何减少内存呢?只要知道A、T、C、G其中...
300+ AC 代码 。 大数 , 线段树 , 字符串 , dp.....
hdu 1695 GCD(欧拉函数+容斥原理).docx
acm hdu as easy as a+b
杭电ACMhdu1163
HDU1059的代码
hdu1001解题报告
hdu 1574 passed sorce
HDU的一题........HDU DP动态规
hdu2101AC代码