神奇的海螺
题目描述
小明有一个神奇的海螺,你对海螺说一段字符串,海螺就会返回一个单词,有字符串里面的所有字符组成
如告诉海螺
“lloeh”
海螺则会告诉你
“hello”
如果有多个单词对应,海螺则会输出字典序最小的那个,如果没找到输入'nothing to find’(不带引号)
输入
第一行一个m
表示m个单词 (1≤m≤105)
接下来m行,每行一个字符串
第m+2行,输入一个k (1≤k≤105)
接来下k
行,每行一串字符串
(m+k
个字符串长度之和小于107
,每一个字符串中的相同字母不会超过5个)
输出
输出k
行,如果查到单词输出字典序最小的那个,否则输出'nothing to find’(不带引号)
#include "iostream"
#include "algorithm"
#include "cmath"
#include "map"
#include "set"
#define LL long long
using namespace std;
map<LL,set<string>> mp;//hash解决查找问题,set解决字典序问题u
//既具备hash的属性,又达到字符串排序和去重问题
// ios::sync_with_stdio(0);
LL hash_s(string s)
{
LL ans=0;
for(int i=0;i<s.length();i++)
{
ans+=pow(5,s[i]-'a');//解决字典序问题
}
return ans;
}
int main(int argc, char const *argv[]) {
std::ios::sync_with_stdio(false);//cin 与 cout 的加速球
int m;
cin>>m;
for(int i=0;i<m;i++)
{
string s1;
cin>>s1;
LL tmp=hash_s(s1);
mp[tmp].insert(s1);
}
int n;
cin>>n;
for(int i=0;i<n;i++)
{
string s;
cin>>s;
LL tmp1=hash_s(s);
if(!mp[tmp1].empty())
cout<<*mp[tmp1].begin()<<endl;//返回第一个匹配的字符串
else
cout<<"nothing to find"<<endl;
}
return 0;
}