首页 > 其他 > 详细

1056 IMMEDIATE DECODABILITY

时间:2015-10-17 12:09:05      阅读:120      评论:0      收藏:0      [点我收藏+]

题目链接: http://poj.org/problem?id=1056

题意: 给定编码集, 判断它是否为可解码(没有任何一个编码是其他编码的前缀).

分析: 简单题目, 遍历一遍即可, 只需判断两个编码是否互为前缀或相等即可.

代码:

 1 #include <iostream>
 2 #include <vector>
 3 #include <string>
 4 using namespace std;
 5 string line;
 6 vector<string> vs;
 7 
 8 bool isPrefix(string s1,string s2){
 9     int len1 = s1.length();
10     int len2 = s2.length();
11     int i;
12     if(len1<len2){ //判断s1 是否为s2前缀
13         for(i=0;i<len1;++i){
14             if(s1.at(i) != s2.at(i))
15                 break;
16         }
17         if(i == len1)
18             return true;
19         else 
20             return false;
21     }
22     if(len1 > len2)
23         return isPrefix(s2,s1);
24     if(len1 == len2){
25         return s1 == s2;
26     }
27 }
28 
29 int main(){
30     int sets = 0;
31     while(cin>>line){
32         sets++;
33         vs.clear();
34         // enter a set
35         while(line.at(0)!=9){
36             vs.push_back(line);
37             cin>>line;
38         }
39         int len = vs.size();
40         int i,j;
41         for(i=0;i<len;++i){
42             for(j=0;j<len;++j){
43                 if(i!=j && isPrefix(vs[i],vs[j])){
44                     break;
45                 }
46             }
47             if(j!=len)
48                 break;
49         }
50         if(i!=len)
51             cout<<"Set "<<sets<<" is not immediately decodable"<<endl;
52         else
53             cout<<"Set "<<sets<<" is immediately decodable"<<endl;
54         //clear to accpet the new set.
55         vs.clear();
56     }
57     return 0;
58 }

 

1056 IMMEDIATE DECODABILITY

原文:http://www.cnblogs.com/roger9567/p/4887158.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!