hdu 1305 还是字典树
2024-09-05 05:06:57
#include<cstdio>
#include<iostream>
#include<string>
#include<cstdlib>
#define maxn 2
#include<queue>
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 Case=;
string ss;
queue<string> fuck;
while(cin>>ss)
{
if(ss=="9")
{
int flag=;
root=(Tri *)malloc(sizeof(Tri));
for(int i=;i<maxn;i++) root->next[i]=NULL;
root->num=;
while(!fuck.empty())
{
string temp;
temp=fuck.front();
fuck.pop();
if(findTri(temp)==-)
{
flag=;
break;
}
buildTri(temp);
}
if(flag) printf("Set %d is immediately decodable\n",++Case);
else printf("Set %d is not immediately decodable\n",++Case);
del(root);
continue;
}
fuck.push(ss);
}
return;
}
最新文章
- atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php
- cocos2d-x之物理引擎之碰撞监测
- HoloLens开发手记 - Unity之Persistence 场景保持
- CentOS6.4_x86_开关机查看
- P1023 奶牛的锻炼
- DEDECMS采集规则,过滤,替换文章内的部分内容
- JS 移动动画
- [Mac] mac linux 多线程下载利器 axel
- vue input输入框长度限制
- android TabLayout设置选中标签字体加粗功能
- Game Development Patterns and Best Practices (John P. Doran / Matt Casanova 著)
- 颜色空间之CIE2000色差公式
- Cocos2d-x CCControlPotentiometer之圆形音量button及特效
- vue生产环境清除console.log
- cakephp 利用Pushapi扩展 进行app 消息推送
- C程序设计语言习题(3-5)
- 关于Nginx启动成功,浏览器不能访问的解决办法
- 404 Note Found 队-Alpha4
- L1正则化与L2正则化的理解
- asp.net viewstate 数据大导致错误