HDU 1075 What Are You Talking About

这题的代码写得好恶心。。二分查找,连改进的心情都没。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<queue>
#include<vector>
#include<map>
using namespace std;
char eng[501000][12],mars[501000][12],tran[3010];
int r[501000];
int search(int left,int right){
	int mid=(left+right)>>1;
//	printf("%d\n",mid);
	if(left>right) return -1;
	if(left==right)
		if(strcmp(mars[left],tran)==0)
			return left;
		else
			return -1;
	if(strcmp(mars[mid],tran)<0)
		search(mid+1,right);
	else if(strcmp(mars[mid],tran)>0)
		search(left,mid);
	else
		return mid;
}
int cmp1(const void *a,const void *b){
	char *s1=mars[*(int *)a];
	char *s2=mars[*(int *)b];
	return strcmp(s1,s2);
}
int cmp2(const void *a,const void *b){
	char *s1=(char *)a,*s2=(char *)b;
	return strcmp(s1,s2);
}
int main()
{
	char text[3010],s[10];
	while(scanf("%s",s)!=EOF){
		int k=0;
		scanf("%s",eng[k]);
		while(strcmp(eng[k],"END")){
			scanf("%s",mars[k++]);
			scanf("%s",eng[k]);
		}
		for(int i=0;i<k;i++)
			r[i]=i;
		qsort(r,k,sizeof(r[0]),cmp1);
		qsort(mars,k,sizeof(mars[0]),cmp2);
	//	for(int i=0;i<k;i++)
	//		printf("%d ",r[i]);
	//	puts("");
		gets(text);
		gets(text);
		gets(text);
	//	puts(text);
		while(strcmp(text,"END")){
			int len=strlen(text);
			for(int i=0,j=0;i<len;i++)
				if(text[i]<='z'&&'a'<=text[i])
					tran[j++]=text[i];
				else{
					if(j){
						tran[j]='\0';
						int judge=search(0,k-1);
					//	printf("%d\n",judge);
						if(judge==-1)
							printf("%s",tran);
						else
							printf("%s",eng[r[judge]]);
						j=0;
					}
					putchar(text[i]);
				}
			puts("");
			gets(text);
		}
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值