16. 前缀码判定

来源:互联网 发布:电力行业大数据应用 编辑:程序博客网 时间:2024/05/22 15:33

16. 前缀码判定

成绩10开启时间2014年11月23日 Sunday 15:40折扣0.8折扣时间2014年12月7日 Sunday 23:55允许迟交否关闭时间2014年12月14日 Sunday 23:55

前缀码:任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。

请编写一个程序,判断输入的n个由10组成的编码是否为前缀码。如果这n个编码是前缀码,则输出"YES”;否则输出第一个与前面编码发生矛盾的编码。

输入:
1行为n(表示下面有n行编码)
2n+1行为n个由01组成的编码

输出:判断结果


例如,如果输入:

5

00

01

10

110

111

每一个字符均不是其他字符编码的前缀,所以,输出:YES

再如,如果输入:

5

00

01

10

110

11

编码11与前面的编码110的前缀,所以,输出:11

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助测试用例 1以文本方式显示
  1. 5↵
  2. 00↵
  3. 01↵
  4. 10↵
  5. 110↵
  6. 111↵
以文本方式显示
  1. YES↵
1秒64M0测试用例 2以文本方式显示
  1. 5↵
  2. 00↵
  3. 01↵
  4. 10↵
  5. 110↵
  6. 11↵
以文本方式显示
  1. 11↵
1秒64M0测试用例 3以文本方式显示
  1. 5↵
  2. 00↵
  3. 01↵
  4. 10↵
  5. 11↵
  6. 111↵
以文本方式显示
  1. 111↵
1秒64M0测试用例 4以文本方式显示
  1. 5↵
  2. 111↵
  3. 110↵
  4. 10↵
  5. 01↵
  6. 00↵
以文本方式显示
  1. YES↵
1秒64M0测试用例 5以文本方式显示
  1. 8↵
  2. 00↵
  3. 010↵
  4. 0110↵
  5. 0111↵
  6. 10↵
  7. 110↵
  8. 1110↵
  9. 1111↵
以文本方式显示
  1. YES↵
1秒64M0测试用例 6以文本方式显示
  1. 8↵
  2. 00↵
  3. 010↵
  4. 0110↵
  5. 0111↵
  6. 10↵
  7. 11↵
  8. 1110↵
  9. 111↵
以文本方式显示
  1. 1110↵
1秒64M0
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct Node{int flag;struct Node *lchild;struct Node *rchild;}*BiTree,BITree;int main(){int n;char map[100000];int flag = 0;int LEN;int i;BiTree Tree;BiTree p;Tree = (BiTree)malloc(sizeof(BITree));Tree->flag = 0;Tree->lchild = NULL;Tree->rchild = NULL;scanf("%d", &n);while (n--){memset(map, 0, sizeof(map));scanf("%s", map);LEN = strlen(map);p = Tree;for (i = 0; i < LEN; i++){if (map[i] == '1'){if (p->lchild == NULL){p->lchild = (BiTree)malloc(sizeof(BITree));p = p->lchild;p->lchild = NULL;p->rchild = NULL;if (i == LEN - 1)p->flag = 1;elsep->flag = 0;}else{if (p->lchild->flag == 1 || i == LEN - 1){flag = 1;break;}else{p = p->lchild;}}}else{if (p->rchild == NULL){p->rchild = (BiTree)malloc(sizeof(BITree));p = p->rchild;p->lchild = NULL;p->rchild = NULL;if (i == LEN - 1)p->flag = 1;elsep->flag = 0;}else{if (p->rchild->flag == 1 || i == LEN - 1){flag = 1;break;}else{p = p->rchild;}}}if (flag == 1){break;}}if (flag == 1)break;}if (flag == 0)printf("YES\n");elseprintf("%s\n", map);return 0;}

0 0
原创粉丝点击