HDU 1880 魔咒词典

哈利波特在魔法学校的必修课之一就是学习魔咒。据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助。

给你一部魔咒词典。当哈利听到一个魔咒时,你的程序必须告诉他那个魔咒的功能;当哈利需要某个功能但不知道该用什么魔咒时,你的程序要替他找到相应的魔咒。如果他要的魔咒不在词典中,就输出“what?”

​
#include<string>
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
int get_hash(char a[])
{
	int ans=0;
	for(int i=0;a[i]!='\0';i++)
	{
		ans=ans*131+a[i];
	}
	return ans;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,c,f,len,i,j,t;
	char a[300],cur[110],fun[110];
	map<int,string> dic;
	while(gets(a)&&a[0]!='@')
	{
		len=strlen(a);
		for(i=1;a[i]!=']';i++)
		{
			cur[i-1]=a[i];
		}
		cur[i-1]=0;
		c=get_hash(cur);
		i+=2;
		for(j=i;j<len;j++)
		{
			fun[j-i]=a[j];
		}
		fun[j-i]=0;
		f=get_hash(fun);
		dic[c]=fun;
		dic[f]=cur;
	}
	scanf("%d",&n);
	gets(a);
	while(n--)
	{
		gets(a);
		len=strlen(a);
		if(a[0]=='[')
		{
			a[len-1]=0;
			t=get_hash(a+1);
		}
		else
		{
			a[len]=0;
			t=get_hash(a);
		}
		if(dic.count(t))
		{
			cout<<dic[t]<<endl;
		}
		else
		{
			cout<<"what?"<<endl;
		}
	}
	return 0;
}

​

 

上一篇:案例解析 | 阿里云数据库助力特步全渠道业务稳步上云


下一篇:【HDU】2002 计算球体积