NOIP2012模擬8 9 監聽還原

2021-10-10 01:12:31 字數 1469 閱讀 2301

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

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

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

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

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

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

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

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

abcdefghijklmnopqrstuvwxyz

abcdab

abcdabcd

通訊長度l<=100000。

資料不強,直接暴力就行

從n/2開始列舉每個交界點,往後面匹配,不成功就break

hack資料:a·····ab

#include

#include

#include

#define r register

#define ll long long

#define max(a,b) (a>b?a:b)

#define min(a,b) (ausing

namespace std;

const

int n=

1e5+10;

int n,k,last,z[n]

,head[n]

,to[n*2]

,next[n*2]

,w[n*2]

;ll f[n][2

];inline

void

read

(int

&x)inline

void

add(

int a,

int b,

int c)

inline

void

dfs(

int u,

int v)

if(z[u]

)f[u][0

]=0x7ffffffffff

,f[u][1

]=sum;

else f[u][0

]=sum,f[u][1

]=sum-ma;

}int

main()

dfs(1,

1);printf

("%lld"

,min

(f[1][

0],f[1][

1]))

;}

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 x x.第...

NOIP2012模擬10 25 剪草

首先分析的出兩個結論,1 每棵草最多隻剪一次 2 按照生長速度,先剪小的,再剪大的。不難證明,略。那麼把小草按生長速度從大到小排個序後,設f i,j 表示,在倒數第i個時刻,已經處理了j棵草時的最小高度和。轉移為f i j min f i j 1 f i 1 j 1 a j g a ns i 1 a...

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 xx.50...