UVa644 立即可解码性

来源:互联网 发布:注册淘宝小号的技巧 编辑:程序博客网 时间:2024/06/01 09:51

思想:主要受上一题10815的启发,对每组数据在进行前缀判断时,可以先排序(因为排序后再判断的话,只需要判断相邻的即可),再遍历所有元素,对其与其相邻(后一个)元素进行前缀判断。其中前缀判断是用strncmp的第三个参数指定前n个字符比较。

Code:

#include<stdio.h>#include<stdlib.h>#include<string.h>int cmp_string(const void* _a, const void* _b);void imdecode(int n, int k);char code[10][20];int main(){int i = 0;//每组数据有i个code,即行数 int j = 1;//第j组数据 memset(code, 0, sizeof(code));while ((scanf("%s", code[i])) != EOF)//注意别忘了写!=EOF,否则意思是scanf成功读入0个值,不是检测到文件结尾。。 {//输入数据以EOF结束 if (code[i][0] == '9'){//一组数据 //for(int k=0;k<i;++k)//printf("%d: %s\n",k,code[k]);imdecode(i, j);j++;memset(code, 0, sizeof(code));i = 0;}elsei++;}//whilereturn 0;}void imdecode(int n, int k){qsort(code, n, sizeof(code[0]), cmp_string);//第三个参数是各元素占用空间大小,是sizeof,不是strlen。。。 bool b = 1;for (int i = 0; i<n; ++i){if (strncmp(code[i + 1], code[i], strlen(code[i])) == 0){//printf("%d:%s\n%d:%s\n",i+1,code[i+1],i,code[i]); b = 0;}}if (b)printf("Set %d is immediately decodable\n", k);elseprintf("Set %d is not immediately decodable\n", k);}int cmp_string(const void* _a, const void* _b){char* a = (char*)_a;char* b = (char*)_b;return strcmp(a, b);}


0 0
原创粉丝点击