w15作業 ZJM 與霍格沃茲(必做)

2021-10-06 15:23:32 字數 2593 閱讀 8510

zjm 為了準備霍格沃茲的期末考試,決心背魔咒詞典,一舉拿下咒語翻譯題

題庫格式:[魔咒] 對應功能

背完題庫後,zjm 開始刷題,現共有 n 道題,每道題給出乙個字串,可能是 [魔咒],也可能是對應功能

zjm 需要識別這個題目給出的是 [魔咒] 還是對應功能,並寫出轉換的結果,如果在魔咒詞典裡找不到,輸出 「what?」

輸入格式:

首先列出魔咒詞典中不超過100000條不同的咒語,每條格式為:

[魔咒] 對應功能

其中「魔咒」和「對應功能」分別為長度不超過20和80的字串,字串中保證不包含字元「[」和「]」,且「]」和後面的字串之間有且僅有乙個空格。魔咒詞典最後一行以「@end@」結束,這一行不屬於詞典中的詞條。

詞典之後的一行包含正整數n(<=1000),隨後是n個測試用例。每個測試用例佔一行,或者給出「[魔咒]」,或者給出「對應功能」。

輸出格式:

每個測試用例的輸出佔一行,輸出魔咒對應的功能,或者功能對應的魔咒。如果在詞典中查不到,就輸出「what?」

樣例輸入:

[expelliarmus] the disarming charm

[rictusempra] send a jet of silver light to hit the enemy

[tarantallegra] control the movement of one』s legs

[serpensortia] shoot a snake out of the end of one』s wand

[lumos] light the wand

[obliviate] the memory charm

[expecto patronum] send a patronus to the dementors

[accio] the summoning charm

@end@

4[lumos]

the summoning charm

[arha]

take me to the sky

樣例輸出:

light the wand

accio

what?

what?

字串雜湊

舉例:字串:???

hash值:(1*seed3+5seed2+4seed1)%mod

seed常見取值為 7、17、131

???常見取值為1?9+7或採用????????????????自然溢位

解題方法:

[魔咒] 對應功能

求出魔咒雜湊值為 hash1,對應功能雜湊值為 hash2

建立兩個 map :

map[hash1] = index,s1[index] = 對應功能

map[hash2] = index,s2[index] = 魔咒

根據查詢判斷是 [魔咒] 還是對應功能, 然後在對應的 map中查詢即可

字串處理:

這道題按照上面的思路做倒是不難,但是在字串的處理上倒是改了挺多遍,在下面總結一下:

(1)cin輸入字串時,遇到空格預設結束,這裡使getline(cin,s)

(2)將字串轉為char型陣列型別,s.c_str()

(3)strncpy函式原型函式原型char* strncpy(char *dest,char *src,int size_tn)複製字串src中的內容(字元,數字、漢字…)到字串dest中,複製多少由size_tn的值決定,注意型別為char型陣列,這也是上面為什麼要把字串轉化為字元陣列

(4)cin後回車被儲存在緩衝區,需要使用getchar()接收。在本題,若cin>>n之後缺少getchar()語句,cin的第乙個字串s會是回車符,造成錯誤

1.掌握字串雜湊的基本方法

2.熟練對字串的操作

#include

#include

#include

#include

using

namespace std;

const

int maxn=

1e5+10;

string s;

char str1[maxn][85

];char str2[maxn][85

];int n,seed=7;

map<

unsigned

long

long

,int

> mp1,mp2;

unsigned

long

long

hash

(string s)

}return ans;

}int

main()

cin>>n;

getchar()

;for

(int i=

0;i)else

}return0;

}

w15作業 ZJM 與生日禮物(選做)

zjm 收到了 q老師 送來的生日禮物,但是被 q老師 加密了。只有 zjm 能夠回答對 q老師 的問題,q老師 才會把密碼告訴 zjm。q老師 給了 zjm 一些僅有 01 組成的二進位制編碼串,他問 zjm 是否存在乙個串是另乙個串的字首.輸入格式 多組資料。每組資料中包含多個僅有01組成的字串...

Week 15 作業A ZJM 與霍格沃茲

zjm 為了準備霍格沃茲的期末考試,決心背魔咒詞典,一舉拿下咒語翻譯題 題庫格式 魔咒 對應功能 背完題庫後,zjm 開始刷題,現共有 n 道題,每道題給出乙個字串,可能是 魔咒 也可能是對應功能 zjm 需要識別這個題目給出的是 魔咒 還是對應功能,並寫出轉換的結果,如果在魔咒詞典裡找不到,輸出 ...

Week15 作業A ZJM 與霍格沃茲

給出一系列二元組 原字串 翻譯字串 進行若干次查詢,給出原字串或翻譯字串,輸出對應的翻譯字串或原字串。首先給出若干行,每行乙個二元組 原字串 翻譯字串 最後一行以 end 結尾 之後一行給出乙個整數q,表示詢問次數 之後q行,每行乙個 原字串 或翻譯字串 輸出q行,每行輸出對應字串。expellia...