http://poj.org/problem?id=2503&&hash

原创 2012年03月31日 09:31:08

题意:给你一些英语单词和这些单词翻译成其他语言时的单词,在后面给你一些其他语言的单词,看能否用字典来翻译。

思路:hash表,字典树,排序。。

我的第一个蹩脚的hash~~~~

AC代码:

#include<cstdio>
#include<string.h>
#include<iostream>
#include<string>
#define N 100005
using namespace std;
int head[N];
typedef struct str
{
	char s[11];
	char s1[11];
	int next;
}Node;
Node node[N];
void add(char *s,char *s1,int t)
{
	int m=1;
	for(int i=0;i<strlen(s);++i) m=(m*s[i])%N;
	strcpy(node[t].s,s);
	strcpy(node[t].s1,s1);
	node[t].next=head[m];
	head[m]=t;
}
char* Quary(char *s)
{
	
	int m=1;
	for(int i=0;i<strlen(s);++i) m=(m*s[i])%N;
	for(int i=head[m];i!=-1;i=node[i].next)
	if(!strcmp(s,node[i].s)) return node[i].s1;
	return "eh";
}
int main()
{
	char a[25],b[11],c[11];
	int num=0;
	memset(head,-1,sizeof(head));
	while(gets(a)&&strcmp(a,""))//""和" "不一样。。。。。
	{ 
		num++;
		int i;
		for( i=0;i<strlen(a);++i)
			if(a[i]==' ')  {a[i]='\0';break;}
			strcpy(b,a);
			strcpy(c,a+(i+1));
			add(c,b,num);
	}
	while(~scanf("%s",b))
	printf("%s\n",Quary(b));
	return 0;
}

qsort+二分

#include<iostream>
#include<string.h>
#include<cstdio>
#include<stdlib.h>
#define N 100005
using namespace std;
typedef struct str
{
	char s[11];
	char s1[11];
}Node;
Node node[N];
int cmp1(const void *a,const void *b)
{return strcmp(((Node*)a)->s,((Node*)b)->s);}
int cmp(const void *a,const void *b)
{return strcmp((char*)a,((Node*)b)->s);}
int main()
{
	char a[25];
	char b[11],c[11];
	int num=0;
	while(gets(a)&&strcmp(a,""))
	{
		int n=strlen(a),i;
		for( i=0;i<n;++i)
			if(a[i]==' ') {a[i]='\0';break;}
			strcpy(node[num].s1,a);
			strcpy(node[num++].s,a+(i+1));
	}
	qsort(node,num,sizeof(Node),cmp1);
	while(~scanf("%s",a))
	{
		Node *p=(Node*)bsearch(a,node,num,sizeof(Node),cmp);
		if(p) printf("%s\n",p->s1);
		else printf("eh\n");
	}return 0;
}

数组模拟字典树~~~~

#include<iostream>
#include<string.h>
#include<cstdio>
#include<stdlib.h>
#define N 100005
using namespace std;
typedef struct str
{
	int id;
	int next[26];
}Node;
Node node[4*N];
char ss[N][11];
int num=2;
void add(int j,char* s)
{
	int i=0,h=1;//h表示根,,,,
	while(1)
	{
		int m=s[i]-'a';
		if(node[h].next[m]==0)  node[h].next[m]=num++;
		 h=node[h].next[m];
		if(s[++i]=='\0') {node[h].id=j;return;}
	}
}
int Quary(char *s)
{
  int h=1;
  int n=strlen(s);
  for(int i=0;i<n;++i)
  {
	  int m=s[i]-'a';
	  if(node[h].next[m]==0) return -1;
	  else  h=node[h].next[m];
  }
  return node[h].id;
}
int main()
{
	char a[25],b[11];
	 int j=1;
	while(gets(a)&&strcmp(a,""))
	{ 
		int n=strlen(a),i;
		for( i=0;i<n;++i)
			if(a[i]==' '){a[i]='\0';break;}
			strcpy(ss[j],a);
			strcpy(b,a+(i+1));
			add(j++,b);
	}
	while(~scanf("%s",a))
	{
	  int k=Quary(a);
	  if(k==-1) printf("eh\n");
	  else printf("%s\n",ss[k]);
	}return 0;
}






http://poj.org/problem?id=2488

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3073...

http://poj.org/problem?id=3461&&kmp

这一题真是让我纠结,,本以为kmp算法已经掌握很熟练了,木想到tle,,尼玛的什么kmp,然后又看了看书,,发现这竟然和我写的kmp不一样,于是按书重新写了一遍,竟然木有超时,,我表示很受伤啊!! ...

http://poj.org/problem?id=1363

Rails Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24642   Accepte...

http://poj.org/problem?id=3233

Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 8740 Accepted: 37...

http://poj.org/problem?id=1125

裸的最短路径问题,这应该是以前的一道月赛题,一开始用floyd写的,这次用spfa+优先队列优化,还有存图的方式和以前不同。。。 题意:求出在哪个点发起谣言,传到每个人的所用的时间最少,以每个点为源...

http://poj.org/problem?id=1287&&prim

Description You are assigned to design network connections between certain points in a wide area. Y...

http://poj.org/problem?id=2983

Description The galaxy war between the Empire Draco and the Commonwealth of Zibu broke out 3 year...

http://poj.org/problem?id=1001

Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 134006  ...

http://poj.org/problem?id=2965

Description The game “The Pilots Brothers: following the stripy elephant” has a quest where a pla...

http://poj.org/problem?id=3159

这道题很是给力啊,,spfa+stack一下AC了,,有点小激动,,,,, 大自的说一下题意啊,,,就是班长分蜡烛,让你求该班长和他那班的一个同学所分蜡烛差的最大值,,下面介绍一下建图思想,,假设第...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:http://poj.org/problem?id=2503&&hash
举报原因:
原因补充:

(最多只允许输入30个字)