uva 644 Immediate Decodability(字符串比对)

来源:互联网 发布:电动剃须刀,知乎 编辑:程序博客网 时间:2024/06/07 09:34

题意是找出编码中是否存在一个编码是另一个编码的前缀。


利用排序的性质,排在前面的肯定是短的,即为前缀。


代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>char str[1000][100];int min(int a, int b){    return a > b ? b : a;}int cmp(void const *va, void const *vb){    char *a = (char*)va;    char *b = (char*)vb;    return strcmp(a, b);}bool is_decode(int n){    int i, j;    for (i = 1; i < n; i++)    {        int m = min(strlen(str[i - 1]), strlen(str[i]));        for (j = 0; j < m; j++)        {            if (str[i - 1][j] != str[i][j])                break;        }        if (j == m)            return false;    }    return true;}int main(){#ifdef LOCAL    freopen("in.txt", "r", stdin);#endif // LOCAL    int ncase = 1;    while (scanf("%s", str[0]) != EOF)    {        int i = 1;        while (scanf("%s", str[i]) && str[i][0] != '9')            i++;        qsort(str, i, sizeof(str[0]), cmp);        if (is_decode(i))            printf("Set %d is immediately decodable\n", ncase++);        else            printf("Set %d is not immediately decodable\n", ncase++);    }    return 0;}


0 0