标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 12972 | Accepted: 6222 |
Description
Input
Output
Sample Input
01 10 0010 0000 9 01 10 010 0000 9
Sample Output
Set 1 is immediately decodable Set 2 is not immediately decodable
题意:和HDU 1671很像,就是问你有没有一个串是另一个的前缀。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream> using namespace std; const int MAXN = 2; typedef struct Trie_Node { bool isCode; struct Trie_Node *next[MAXN]; }Trie; bool flag; void Trie_insert(Trie *root,char *str) { Trie *p=root; int len=strlen(str); for(int i=0;i<len;i++) { int k=str[i]-‘0‘; if(p->next[k]==NULL) { Trie *t=new Trie; for(int j=0;j<MAXN;j++) t->next[j]=NULL; t->isCode=false; p->next[k]=t; } else { if(p->next[k]->isCode) { flag=false; return; } } p=p->next[k]; } p->isCode=true; } void Trie_del(Trie *root) { for(int i=0;i<MAXN;i++) { if(root->next[i]!=NULL) Trie_del(root->next[i]); } free(root); } char str[15]; int main() { int iCase=0; while(scanf("%s",str)!=EOF) { iCase++; Trie *root=new Trie; for(int i=0;i<MAXN;i++) root->next[i]=NULL; root->isCode=false; flag=true; Trie_insert(root,str); while(scanf("%s",str)) { if(str[0]==‘9‘) break; if(flag) Trie_insert(root,str); } if(flag) printf("Set %d is immediately decodable\n",iCase); else printf("Set %d is not immediately decodable\n",iCase); Trie_del(root); } return 0; }
POJ 1056 IMMEDIATE DECODABILITY (字典树)
标签:
原文地址:http://www.cnblogs.com/wangdongkai/p/5738423.html