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

2021-10-06 18:20:41 字數 2116 閱讀 5322

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

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

輸入格式:

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

輸出格式:

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

每組資料的輸出單獨一行

樣例輸入:

01

100010

0000901

10010

0000

9

樣例輸出:

set 1 is immediately decodable

set 2 is not immediately decodable

(1)題意分析:乙個字串和乙個字串集合匹配,因此考慮使用字典樹

先記錄一下字典樹的模板:

struct trie

void

init()

void

insert

(string s)

now=child[now]

[x];

} flag[now]=1

;}bool

query

(string s)

return

false;}

};

(2)本題做法:

往字典樹中依次插入每個字串,假設當前字串為 s

有兩種情況需要判斷:

s 是否為之前某個字串的字首

之前是否有某個字串是 s 的字首

對於 s 是否為之前某個字串的字首 :

當字串 s 插入結束後,其最後乙個節點是字典樹中已經存在的節點,則說明 s 為之前某個字串的字首

對於之前是否有某個字串是 s 的字首:

在字串 s 插入過程中,如果遇到某乙個字典樹中的節點為某乙個字串的結尾,則說明存在某個字串是 s 的字首

這裡修改一下上述模板中的insert**即可

bool

insert

(string s)

else

if(i==l-

1||flag[child[now]

[x]]

) jud=

true

; now=child[now]

[x];

} flag[now]=1

;return jud;

}

#include

#include

#include

using

namespace std;

struct trie

void

init()

bool

insert

(string s)

else

if(i==l-

1||flag[child[now]

[x]]

) jud=

true

; now=child[now]

[x];

} flag[now]=1

;return jud;}}

;int k=

1;string str;trie t;

intmain()

if(fflag) cout<<

"set "

<" is not immediately decodable"

"set "

<" is immediately decodable"

return0;

}

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

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

Week15作業 C ZJM與紙條 KMP

zjm 的女朋友是乙個書法家,喜歡寫一些好看的英文書法。有一天 zjm 拿到了她寫的紙條,紙條上的字暗示了 zjm 的女朋友 想給 zjm 送生日禮物。zjm 想知道自己收到的禮物是不是就是她送的,於是想看看自己收到的禮物在紙條 現了多少次。第一行輸入乙個整數代表資料的組數 每組資料第一行乙個字串 ...

程式設計思維與實踐 Week15 作業

problem description 哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急時刻能夠呼叫任何乙個需要的魔咒,所以他需要你的幫助。給你一部魔咒詞典。當哈利聽到乙個魔咒時,你的程式必須告訴他那個魔咒的功能 當...