AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 1. Elementary Problem Solving :: String
Description
通讯中的编码方式,要求每个字符对应的二进制编码,
不能是其他字符对应编码的前缀。
对于几组编码方式,检查是否可行。
Type
String
Analysis
判断每个字符串是否是其他字符串的前缀即可。
如果存在某个字符串是其他字符串的前缀,则编码不可行。
(题目实在太直白了,感觉只是把题目又念了一遍)
Solution
// UVaOJ 644
// Immediate Decodability
// by A Code Rabbit
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
const int MAXN = 100000;
string str[MAXN];
int top;
bool IsPrefix(string , string);
int main() {
int cnt_case = 0;
top = 0;
while (cin >> str[top]) {
if (str[top] == "9") {
bool bo = false;
for (int i = 0; i < top; i++)
for (int j = 0; j < top; j++)
if (i != j && IsPrefix(str[i], str[j]))
bo = true;
printf("Set %d is %simmediately decodable\n", ++cnt_case, bo ? "not " : "");
top = 0;
} else {
top++;
}
}
return 0;
}
bool IsPrefix(string a, string b) {
for (int i = 0; i < a.length(); i++)
if (a[i] != b[i]) return false;
return true;
}