Uva OJ 644 - Immediate Decodability

1Y的一道题

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b){
	char *p=(char *)a;
	char *q=(char *)b;
	return strcmp(p,q);
	}
int f(char *a,char *b){
	if(strlen(b)<strlen(a))return 0;
	int i,len=strlen(a);
	for(i=0;i<len;i++){
		if(a[i]!=b[i])return 0;
		}
	return 1;
	}
int main(){
	char map[20][20];
	char temp[20];
	int i;
	int pm=0;
	int time=0;
	while(scanf("%s",temp)!=EOF){
		int flag=0;
		if(strlen(temp)==1&&temp[0]=='9')flag=1;
		if(!flag){
			for(i=0;i<=strlen(temp);i++)map[pm][i]=temp[i];
			pm++;
			}
		else {
			flag=0;
			qsort(map,pm,sizeof(map[0]),cmp);
			int orz=0;
			for(i=1;i<pm;i++){
				if(f(map[i-1],map[i]))orz=1;
				if(orz)break; 
				}
			if(orz)printf("Set %d is not immediately decodable\n",++time);
			else printf("Set %d is immediately decodable\n",++time);
			pm=0;
			}
		}
	return 0;
	}

数据规模很小,大点的话估计要用树了==

排序,判断相邻是否为前缀关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值