怪盜基德的挑戰書 HDU 4552

2021-08-15 14:36:54 字數 1086 閱讀 9365

「在樹最美麗的那天,當時間老人再次把大鐘平均分開時,我會降臨在燈火之城的金字塔前,帶走那最珍貴的笑容。」這是怪盜基德盜取巴黎羅浮宮的《蒙娜麗莎的微笑》這幅畫時,挑戰書上的內容。

但這次,怪盜基德的挑戰書上出現了一串串小寫字母「aaab sdfeeddd...」。柯南以小學生的眼睛,超凡高中生的頭腦,快速統計各種字母頻率,字串長度,並結合挑戰書出現的時間等資訊,試圖分析怪盜基德的意圖。最後,他將線索鎖定在字串的迴圈次數上。並且進一步推理發現,從字串的第一位開始,到第i位,形成該字串的子串(c1, c2, c3 ... ci )。對於某一子串ci在該字串中出現的次數記為ki,則全部子串的迴圈次數總和aim = k1 + k2 + ... + ki + ... + kn,柯南發現,aim恰好對應乙個ascii碼!所以,只要把挑戰書上的字串轉變成數字,再找到對應的ascii碼,就可以破解這份挑戰書了!

現在,你的任務就是把字串轉變成對應數字,因為ascii碼以及擴充套件ascii碼全部只有256個,所以,本題只要把結果對256取餘即可。

input 輸入有多組測試資料;

每組測試資料只有乙個字串,由各種小寫字母組成,中間無空格。

字串的長度為l(0 < l <= 100000)。 output 請計算並輸出字串的aim值,每組資料輸出一行。 sample input

aaa

abab

sample output
6

6

首先我們知道next陣列中next[i]表示的是以第i個字元結尾的字首中最長公共前字尾的長度,我們令dp[i]表示以第i個字元結尾的字首中所含有以第i個字元結尾的字首的個數,那麼顯然有dp[i]=dp[next[i]]+1,求出dp陣列後累加即為答案

#include#includeusing namespace std;

const int n = 100005;

int next[n],dp[n];

char str[n];

void getnext(int m)

}int main()

printf("%d\n",ans%256);

} return 0;

}

HDU4552 怪盜基德的挑戰書

problem description 在樹最美麗的那天,當時間老人再次把大鐘平均分開時,我會降臨在燈火之城的金字塔前,帶走那最珍貴的笑容。這是怪盜基德盜取巴黎羅浮宮的 蒙娜麗莎的微笑 這幅畫時,挑戰書上的內容。但這次,怪盜基德的挑戰書上出現了一串串小寫字母 aaab sdfeeddd.柯南以小學生...

HDU 4552 怪盜基德的挑戰書 字尾陣列

傳送門 hdu 4552 怪盜基德的挑戰書 題目分析 答案就是所有字尾和串s的lcp長度相加。字尾陣列搞定。如下 include include include using namespace std typedef long long ll define rep i a b for int i a...

NENU 怪盜基德的遊戲

description kid和新一開始玩乙個有趣的遊戲。遊戲規則是這樣的 在乙個n m棋盤中,某個位置有一顆棋子,並且有些位置是不能走的。現在兩個人輪流操作,每次可以將棋子向上下左右的格仔裡走一格,不能走出邊界。若一方不能行動,或者走到了已經走過的格仔,則算失敗。現在給出棋盤的初始狀態,柯南先行。...