Jzoj2937 監聽還原

2022-05-09 18:05:19 字數 975 閱讀 5497

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

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

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

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

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

解法,我們將原串和轉置後的串分別求hash函式,讓後就是列舉分割點o(1)判斷相等了,複雜度o(n)

#pragma gcc opitmize("o3")

#pragma g++ opitmize("o3")

#include#include#include#define l long long

using namespace std;

char s[200010]=,c[26],r[26];

l b[100010],h1[100010],h2[100010],n;

__attribute__((optimize("-o3"))) inline l gh1(int l,int r)

__attribute__((optimize("-o3"))) inline l gh2(int l,int r)

int main()

for(int i=n+2+(n&1)>>1;i<=n;++i)

if(gh1(1,n-i+1)==gh2(i,n))

for(int j=1;j<=n;++j) s[j+n]=r[s[j]-'a']+'a';

puts(s+1);

}

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...