HDU - 1880(unordered_map \ 字串hash876
阿新 • • 發佈:2020-08-25
- 容,給我 魔咒 讓我們輸出 對應的內容字串,給我們 內容字串 讓我們輸出 魔咒字串,如果查詢不到輸出 輸出“What!”
- 思路
- 程式碼一:每行的 魔咒 和 對應的內容 當作 map 的 key 和 val ,之後在反過來
- 程式碼二
- 假如給我 魔咒 讓我們 查詢魔咒對應的內容,我們先把所給的文字總的 內容按輸入順序儲存到 一個數組spell[][]中,我們 通過hash把所有 魔咒字串 轉化為 hash數值,
- 我們把這個每個 魔咒的hash數值和其下表 儲存到,一個結構體中陣列中,通過對這個 結構體陣列 按從 hans數值 從小到大排序,我們在通過 lower_bound() 去查詢 某個魔咒hash值是否存在,如果存在我們就可 獲得 這個魔咒hash值的在結構題陣列中的陣列 下標,有了這個下標,就可以得到 這個魔咒在輸入的時候的下標idx,通過idx的到 spell中儲存的 魔咒對應的內容
程式碼一(unordered_map)
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <bitset>
#include <vector>
#include <stack>
#include <unordered_map>
#include <sstream>
void fre() { system("clear"), freopen("A.txt", "r", stdin); freopen("Ans.txt","w",stdout); }
void Fre() { system("clear"), freopen("A.txt", "r", stdin);}
#define ios ios::sync_with_stdio(false)
#define Pi acos(-1)
#define pb push_back
#define fi first
#define se second
#define ll long long
#define ull unsigned long long
#define db double
#define Pir pair<int, int>
#define m_p make_pair
#define INF 0x3f3f3f3f
#define esp 1e-7
#define mod (ll)(1e9 + 7)
#define for_(i, s, e) for(int i = (ll)(s); i <= (ll)(e); i ++)
#define rep_(i, e, s) for(int i = (ll)(e); i >= (ll)(s); i --)
#define sc scanf
#define pr printf
#define sd(a) scanf("%d", &a)
#define ss(a) scanf("%s", a)
using namespace std;
unordered_map<string, string> mp;
string s, a, b;
int main()
{
/* fre(); */
ios;
while(getline(cin, s) && s[0] != '@')
{
int i = 0;
while(s[i] != ']') i ++;
a = s.substr(0, i + 1);
b = s.substr(i + 2, s.size() - i - 2);
mp[a] = b;
mp[b] = a;
}
int n;
cin >> n;
/* getchar(); //這裡的 getchar 不要忘記否則會被 getline() 吸收 */
getline(cin, s);
while(n --)
{
getline(cin, s);
if(mp[s].size() == 0)
cout << "what?" << endl;
else
{
if(s