hdu 1671 复习字典树
2024-09-05 04:51:17
#include<cstdio>
#include<iostream>
#include<string>
#include<cstdlib>
#define maxn 10
using namespace std;
struct Tri
{
Tri*next[maxn];
int num;
};
Tri *root;
void buildTri(string ss)//建树的过程是一个动态的过程 动插的过程
{
Tri *p=root,*q;
for(int i=;i<ss.size();i++)
{
int id=ss[i]-'0';
if(p->next[id]==NULL)
{
q=(Tri*)malloc(sizeof(Tri));
q->num=;
for(int j=;j<maxn;j++) q->next[j]=NULL;
p->next[id]=q;
p=p->next[id];
}
else p=p->next[id],p->num++;
}
p->num=-;// 作为结束的标志
}
int findTri(string ss)
{
Tri *p=root,*q;
for(int i=;i<ss.size();i++)
{
int id=ss[i]-'0';
p=p->next[id];
if(p==NULL) return;
if(p->num==-) return -;
}
return -;
}
void del(Tri *root)
{
Tri *zz=root;
if(zz==NULL) return;
for(int i=;i<maxn;i++)
{
if(zz->next[i]!=NULL) del(zz->next[i]);
}
free(zz);
}
int main()
{
int t;
cin>>t;
while(t--)
{
root=(Tri*)malloc(sizeof(Tri));
for(int i=;i<maxn;i++) root->next[i]=NULL;
root->num=;
int ret;
cin>>ret;
string ss;
int flag=;
while(ret--)
{
cin>>ss;
if(findTri(ss)==-) flag=;
// cout<<flag<<endl;
buildTri(ss);
}
del(root);
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl; }
return;
}
最新文章
- MAT使用--转
- 使用UML进行项目开发
- ruby cookbook
- phpQuery用法
- 从最简单的HelloWorld理解MVP模式
- [转贴]使用CryptoAPI解析X509证书和P12证书
- Linux基础(二)
- JavaScript--对象-检查一个对象是否是数组
- CP1W-CIF41以太网模块(使用总结)
- git “bad index file sha1 signature fatal: index file corrupt”错误
- android系统自带的Service原理与使用
- FileMode枚举
- samba(转)
- CentOS7 下linux不能上网解决方法​,centos7 eth0 没有ip,IP突然丢失
- Weex-语法笔记 一
- 关于cin的用法一些小结
- 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池
- Javascript--cookie创建与查看
- .Net IOC框架入门之二 CastleWindsor
- USACO比赛题泛刷