ACM非前缀编码 C++实现
来源:互联网 发布:mac wine 使用 编辑:程序博客网 时间:2024/05/29 06:57
Description
有很多方法可以实现使用2进制序列对字符进行编码,比如典型的Huffman编码,如果在对字符的2进制编码中不存在某一个字符的编码是另一个字符编码的前缀,那么就称这种编码方式为非前缀编码,Huffman编码就是一种非前缀编码。比如 A:00 B:10 C:0100 D:0101 则这种编码为非前缀编码;A:01 B:10 C:010 D:0000,则这种编码为前缀编码。
请写一个程序,判断编码是前缀编码还是非前缀编码。
输入:
第一行是一个整数K,表示有多少个测试用例,以后每行一个测试用例。每个测试用例为若干个字符串,字符串之间有空格隔开(最大长度不超过1000)。
输出:
每行输出一个测试用例的结果。如果是非前缀编码输出Yes,否则输出No。
Sample Input
2
01 10 0010 0000
01 10 010 0000
Sample Output
Yes
No
#include<iostream>
#include<stdlib.h>
#define N 1000
using namespace std;
char str[N][N];
int len[N];
int cmp(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b);
}
bool check(int i)
{
int k=len[i],j=0;
while(j<k)
if(str[i][j++]!=str[i+1][j++])
return false;
return true;
}
int main()
{
int k;
cin>>k;
while(k--)
{
scanf("%s",str[0]);
int n=1;
int flag=false;
while(getchar()!='\n')
{
scanf("%s",str[n++]);
}
qsort(str,n,sizeof(str[0]),cmp);
len[0]=strlen(str[0]);
int i=0;
for(i=1;i<n;i++)
{
len[i]=strlen(str[i]);
if(len[i-1]>len[i])
continue;
else
{
if(check(i-1))
{
flag=true;
break;
}
}
}
if(flag)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
return 0;
}
- ACM非前缀编码 C++实现
- ACM非前缀编码 C++实现
- C语言实现循环码系统与非系统编码
- 循环码系统与非系统编码的C语言实现
- Trie 前缀树的c 实现
- 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest C】【脑洞 本质不同实现的转化】Concatenation A串为前缀B串为后缀不同串
- 非前缀编码(2011年12月23日23:16:27)
- ACM括号编码(C++实现)
- ACM哈夫曼树建立、哈夫曼编码C++实现
- ACM括号编码(C++实现)
- ACM哈夫曼树建立、哈夫曼编码C++实现
- Huffman编码C实现
- BASE64编码 C实现
- c 实现哈夫曼编码
- C 实现 哈夫曼编码
- 霍夫曼前缀编码
- 前缀式计算 ACM 数据结构
- SDUT ACM 实验九 C语言实验—字符编码
- Android模拟器永久删除卸载系统APK(Windows & Linux平台)
- 最近一些
- java学习笔记《java面向对象编程》——面向对象开发方法概述
- 接口和抽象类
- abstract interface和interface中的abstract 方法
- ACM非前缀编码 C++实现
- 带你走进缓存世界(6):共享缓存
- jQuery 动态操作表单数据
- 20111101学习总结:
- 购物车的实现
- JSP(二)
- 购物车的实现原理
- 网页浏览次数统计jsp代码及jsp总结
- iOS内存 管理 一点