【HDU】1305 Immediate Decodability(字典树:结构体数组,二维数组,链表/指针)

 一、用的二维数组

#include 
#include 
#include 
using namespace std;

const int maxn = 100;
int tr[maxn][2];
int mk[maxn];
int tot;

void insert(string s)
{
	int u =0;
	for(int i=0;i=2)
		return false;
	return true;
}


int main ()
{
	string s[maxn];
	int num=0;
	int t=0;
	tot=0;
	memset(tr,0,sizeof(tr));
	memset(mk,0,sizeof(mk));
	while(cin >> s[num])
	{
		if(s[num]=="9")
		{
			int i=0;
			int flag = 1;
			for(;i

二、用的结构体数组

#include 
#include 
#include 
#include 
using namespace std;
int num,tot;
const int maxn = 100;
typedef struct 
{
    int cnt;
    int next[2];
}N;

N T[maxn];

void insert(string s)
{
    int u = 0;
    for(int i=0;i=2)
        return false;
    return true;
}

int main ()
{
    string s[maxn]; 
    num=0;
    tot=0;
    int t=1;
    memset(T,0,sizeof(T));
    while(cin >> s[num])
    {
        if(s[num]!="9")
        {
            insert(s[num]);
            num++;
        }
        else
        {
            int i;
            int flag = 1;
            for(i=0;i

三、链表,指针

#include 
#include 
#include 
#include 
using namespace std;

const int maxn = 100;
typedef struct node
{
	int cnt;
	node *next[2];
	node()
	{
		cnt = 0;
		next[0] = NULL;
		next[1] = NULL;
	}
}N;

N *root;

void insert(string s)
{
	N *p = root;
	for(int i=0;inext[x]==NULL)
			p->next[x]=new N;
		p=p->next[x];
	}
	p->cnt++;
}

bool find(string s)
{
	N *p = root;
	for(int i=0;inext[x]!=NULL)
		{
			if(p->cnt)
			{	
				return false;
			}	
			else
				p=p->next[x];	
		}	
	}
	if(p->cnt>=2)
		return false;
	return true;
}

void del_node(N *root)
{
	for(int i=0;i<2;i++)
	{
		if(root->next[i]!=NULL)
			del_node(root->next[i]);
	}
	delete(root); 
}

int main ()
{
	string s[maxn];
	int num = 0;
	int t = 1;
	root = new N;
	while(cin >> s[num])
	{
		if(s[num] == "9")
		{
			int flag = 1;
			int i;
			for(i=0;i

 

你可能感兴趣的:(HDU)