其他分享
首页 > 其他分享> > HDU 1880 魔咒词典(字符数组)

HDU 1880 魔咒词典(字符数组)

作者:互联网

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

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

#include<iostream>
#include<string>
#include<cstring>
#include<map>
using namespace std;
const int mod=998244353;
const int seed=131;
int get_hash(char *a)
{
	int h=0;
	for(int i=0;a[i]!='\0';i++)
	{
		h=(h*seed+a[i])%mod;
	}
	return h;
}
int main()
{
	int n,c,f,len,i,j,t;
	char a[110],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.insert(make_pair(f,cur));
		dic.insert(make_pair(c,fun));
	}
	cin>>n;
	getchar();
	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))//(dic.find(t)!=dic.end())
		{
			cout<<dic[t]<<endl;
		}
		else
		{
			cout<<"what?"<<endl;
		}
	}
	return 0;
}

 

标签:HDU,hash,cur,int,魔咒,len,include,1880
来源: https://blog.csdn.net/qq_61908339/article/details/121302750