View Code of Problem 187

#include<iostream>
#include<algorithm>
#include<Cstring>
using namespace std;
int f[2500];
int ans;
void built_tree(string s){
	int p=0,root=0;
	f[root]=1;
	while(p<s.size()){
		if(s[p]=='0'){
			root=root*2+1;
			f[root]=1;
		}
		else{
			root=root*2+2;
			f[root]=1;
		}
		p++;
	}
}  
void dfs(int x){
	int flag=0;
	if(f[x*2+1]==1){
		dfs(x*2+1);
		flag=1;
	}
	if(f[x*2+2]==1){
		dfs(x*2+2);
		flag=1;
	}
	if(flag==0)
	ans++;
}
int main(){
	string s;
	int d=0,index=1;
	memset(f,0,sizeof(f));
	while(cin>>s){
		if(s!="9"){
			d++;
			built_tree(s);
		}	
		else{
			ans=0;
			dfs(0);
			if(ans==d)
			printf("Set %d is immediately decodable\n",index++);
			else
			printf("Set %d is not immediately decodable\n",index++);
			d=0;
			memset(f,0,sizeof(f));
		}
		
	}
}

Double click to view unformatted code.


Back to problem 187