#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
class biary_tree
{
struct node_t
{
bool flag;
node_t* left;
node_t* right;
node_t():flag(false),left(NULL),right(NULL){}
};
public:
biary_tree()
{
root_=new node_t();
}
bool insert(std::string& str)
{
int size=0;
return insert(root_,str,size);
}
void clear()
{
clear(root_);
root_=new node_t();
}
private:
bool insert(node_t* node,std::string& str,size_t size)
{
if(node->flag==true){
return false;
}
if(size>=str.size()){
if(node->flag==false){
node->flag=true;
return true;
}else{
return false;
}
}
if(str[size]=='0'){
if(node->left==NULL){
node->left=new node_t();
}
return (insert(node->left,str,size+1));
}else{
if(node->right==NULL){
node->right=new node_t();
}
return insert(node->right,str,size+1);
}
}
void clear(node_t* node)
{
if(node==NULL){
return;
}
clear(node->left);
clear(node->right);
delete node;
}
node_t* root_;
};
std::string str;
std::vector<std::string> code;
typedef std::vector<std::string>::iterator co_itr;
co_itr itr;
biary_tree code_tree;
int idx;
int main()
{
while (std::cin>>str){
if(str[0]!='9'){
code.push_back(str);
}else{
std::sort(code.begin(),code.end());
for(itr=code.begin();itr!=code.end();itr++){
if(!code_tree.insert(*itr)){
std::cout<<"set "<<++idx<<" is not immediately decodable"<<std::endl;
break;
}
}
if(itr==code.end()){
std::cout<<"set "<<++idx<<" is immediately decodable"<<std::endl;
}
code.clear();
code_tree.clear();
}
}
}
HDU-1305 Immediate Decodability
最新推荐文章于 2018-02-11 20:44:26 发布