Immediate Decodability HDU 【trie树】

结构体版本

做了优化,比其他题解更压缩,去掉了很多不必要的功能,还有就是我个人觉得初学者的话还是写结构体的好,这样才能更好的理解trie树这种数据结构。

回归题目,题意就是给一组01组合的字符串,不断输入,要求判断是否是之前某个字符的前缀。这里思路就是在每个字符串输入结束后添加一个判断标志。这样子如果下一个字符串输入过程中碰到了,说明刚好前缀包含了之前的某个字符串,那么直接return NO即可;反之如果到底都没得话,就是YES 

总结:一个trie树小模板题,需要你思维转一下,然后对模板进行一点点改进;也说明了一个道理,你写的程序要能为你所用,更多的是要掌握思想

#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
struct trie{
	int son[2];
	int flag;
}a[100005];
int t=0,s=0;
bool ff;
string b;
void add(){
	int i,l,p=0;
	l=b.length();
	for(i=0;i<l;i++){
		if(a[p].son[b[i]-'0']==0)
		a[p].son[b[i]-'0']=++t;
		p=a[p].son[b[i]-'0'];
	if(a[p].flag==1){
		printf("Set %d is not immediately decodable\n",s);
		ff=1;
	}
	}
	a[p].flag=1;
}
int main(){
	ios::sync_with_stdio(false);
	while(cin>>b){
		mem(a,0);
		s++,t=0,ff=0;
		add();
		while(cin>>b&&b!="9"){
			if(ff==1)continue;	
			add();
		}
		if(ff==0)printf("Set %d is immediately decodable\n",s);
	}
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值