JZOJ 2937 監聽還原

2021-10-10 01:09:57 字數 1295 閱讀 5080

alice和bob正在悄悄地給對方發資訊,資訊都是由英文小寫字母組成的,他們約定,所有的字母都得經過乙個字母表進行變換,以防洩漏。另一方面john卻在監聽。

john發現,alice和bob通訊的時候,總是先傳送加密後的密文,然後緊接著傳送原文。

但是alice和bob似乎也意識到了似乎有人監聽,有時候會隨意中斷了他們的通訊。不過每次都是在傳送完密文之後才停止傳送的。也就是說,john截獲到的資訊是密文的全文以及前一部分原文。原文可能乙個字元都沒有,也可能原文的全文都被截獲。

現在john比較頭疼,他雖然已經得到了他們兩個人通訊的加密字母表,但是分不清楚什麼地方是密文和明文的分界線。你能幫他還原回完整的傳輸內容嗎?

如果有多種可能時,john認為那個最短的資訊才是原始的。

第一行是密碼**,包含26個小寫字母,依次表示a-z加密後的字母。

第二行是john截獲到的通訊資訊。

包含一行,表示還原後的通訊資訊。

abcdefghijklmnopqrstuvwxyz

abcdab

abcdabcd

通訊長度l<=100000。

這題可以直接暴力。由題目可知密文長度》=⌊l/

2⌋

\left \lfloor l/2\right \rfloor

⌊l/2

⌋,可以把前一半的密文先轉換回原文,然後再逐漸匹配,如果失配則立馬停止,繼續轉換,可證明暴力的時間複雜度能夠通過1s的時限。

tips:

正解因該是類似於kmp或hash之類的東西。

**如下

#include

using

namespace std;

int i,j,n,m,k,l,o,p;

char c[35]

,ch[35]

;char s[

100005

],ys[

100005];

intmain()

scanf

("%s"

,s+1);

n=strlen

(s+1);

for(i=

1;i<=

(n-1)/

2;i++

)for

(i;i<=n;i++)}

if(bz)

for(j=

1;j<=i;j++

)return0;

}}for(j=

1;j<=n;j++

)for

(j=1

;j<=n;j++

)}

碼風有點醜,請見諒。

293 翻轉遊戲

你和朋友玩乙個叫做 翻轉遊戲 的遊戲,遊戲規則 給定乙個只有 和 的字串。你和朋友輪流將 連續 的兩個 反轉成 當一方無法進行有效的翻轉時便意味著遊戲結束,則另一方獲勝。請你寫出乙個函式,來計算出第一次翻轉後,字串所有的可能狀態。示例 輸入 s 輸出 1.字串操作 class solution ve...

2 9 3 arcTo 畫圓角矩形

charset utf 8 arcto 畫圓角矩形title body canvas style head id canvas width 1000 height 600 canvas body var canvas document.getelementbyid canvas context ca...

MT 293 拐點處切線

2018浙江高考壓軸題 已知函式 f x sqrt ln x.2 若 a le 3 4 ln 2,證明 對於任意 k 0 直線 y kx a 與曲線 y f x 有唯一的公共點.分析 等價於 k dfrac ln x a 有唯一解.記 g x dfrac ln x a 則 g x dfrac 1 a...