山東大學程式設計思維作業15

2021-10-06 20:18:30 字數 3236 閱讀 3518

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

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

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

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

input

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

[魔咒] 對應功能

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

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

output

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

sample input

[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

sample output

light the wand

accio

what?

what?

思路:hash一下,然後建立兩個map,乙個是key-咒語,乙個是key-說明,然後當輸入時,計算key,找對應的。

//

// created by haofeng on 5/27/20.

//#include

#include

#include

#include

#include

using

namespace std;

map<

int,

int> zhouyumap;

map<

int,

int> shuomingmap;

string zhouyu[

100010];

string shuoming[

100010];

string s;

int ind;

hash hash;

pair<

int,

int> tmppair;

int hash_value;

string zy;

string sm;

int rightkuohao;

int n;

string tmp;

map<

int,

int>

::iterator it;

int aim_value;

intmain()

cin >> n;

getline

(cin,s)

;for

(int i =

0; i < n;

++i)

else

}else

else}}

}

zjm 收到了 q老師 送來的生日禮物,但是被 q老師 加密了。只有 zjm 能夠回答對 q老師 的問題,q老師 才會把密碼告訴 zjm。

q老師 給了 zjm 一些僅有 01 組成的二進位制編碼串, 他問 zjm:是否存在乙個串是另乙個串的字首.

input

多組資料。每組資料中包含多個僅有01組成的字串,以乙個9作為該組資料結束的標誌。

output

對於第 k 組資料(從1開始標號),如果不存在乙個字串使另乙個的字首,輸出"set k is immediately decodable",否則輸出"set k is not immediately decodable"。

每組資料的輸出單獨一行

sample input

0110

0010

0000901

10010

0000

9sample output

set 1 is immediately decodable

set 2 is not immediately decodable

思路:字典樹的基本應用,實際的資料結構也可以用二叉樹表示,這一棵樹實際上並不記錄string,而是把他們轉化成節點表示了一下。

//

// created by haofeng on 6/1/20.

//#include

#include

using

namespace std;

//這個題簡單來講,把字典數的資料結構簡化成二叉樹是可以做的

bool subtrue=

false

;struct trie

void

clear()

void

insert

(string s)

else

if(flag[child[now]

[x]]==1

) now=child[now]

[x];

} flag[now]=1

;}};

trie tr;

intmain()

else

subtrue=

false

; tr.

clear()

;}else

}}

啊這,knuth的思想太深邃了(逃

山東大學程式設計第二週作業

東東有一張地圖,想通過地圖找到妹紙。地圖顯示,0表示可以走,1表示不可以走,左上角是入口,右下角是妹紙,這兩個位置保證為0。既然已經知道了地圖,那麼東東找到妹紙就不難了,請你編乙個程式,寫出東東找到妹紙的最短路線。輸入是乙個5 5的二維陣列,僅由0 1兩數字組成,表示法陣地圖。輸出若干行,表示從左上...

山東大學程式設計第八周作業

給定乙個數軸上的 n 個區間,要求在數軸上選取最少的點使得第 i 個區間 ai,bi 裡至少有 ci 個點 使用差分約束系統的解法解決這道題 input 輸入第一行乙個整數 n 表示區間的個數,接下來的 n 行,每一行兩個用空格隔開的整數 a,b 表示區間的左右端點。1 n 50000,0 ai b...

山東大學程式設計第十周作業

東東在玩遊戲 game23 在一開始他有乙個數字n,他的目標是把它轉換成m,在每一步操作中,他可以將n乘以2或乘以3,他可以進行任意次操作。輸出將n轉換成m的操作次數,如果轉換不了輸出 1。input 輸入的唯一一行包括兩個整數n和m 1 n m 5 10 8 output 輸出從n轉換到m的操作次...