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