洛谷P1210回文檢測

2021-09-30 14:04:37 字數 1604 閱讀 5230

據說如果你給無限只母牛和無限臺巨型可攜式電腦(有非常大的鍵盤),那麼母牛們會製造出世上最棒的回文。你的工作就是去尋找這些牛製造的奇觀(最棒的回文)。

在尋找回文時不用理睬那些標點符號、空格(但應該保留下來以便做為答案輸出),只用考慮字母』a』-『z』和』a』-『z』。要你尋找的最長的回文的文章是乙個不超過20,000個字元的字串。我們將保證最長的回文不會超過2,000個字元(在除去標點符號、空格之前)。

輸入格式:

輸入檔案不會超過20,000字元。這個檔案可能一行或多行,但是每行都不超過80個字元(不包括最後的換行符)。

輸出的第一行應該包括找到的最長的回文的長度。

下一行或幾行應該包括這個回文的原文(沒有除去標點符號、空格),把這個回文輸出到一行或多行(如果回文中包括換行符)。

如果有多個回文長度都等於最大值,輸出最前面出現的那乙個。

confucius say: madam, i』m adam.

11\

madam, i』m adam

題目翻譯來自nocow。

usaco training section 1.3

對於這個長串 跑一邊manacher 就行了

但是輸入的時候稍加改動 比如說用getchar讀入

因為會有空行

然後存入的時候記錄以下原本位置

輸出就輸出原本位置之間的東西就行了

#include

#include

#include

#include

#include

#include

using namespace std;

char s[50005];

char fr[50005];

int len[50005],plc[50005];

int maxright=-1,pos=0;

int cnt=0;

void add(char ch,int

pos)

void manacher()

//printf("maxright=%d\n",maxright);

}}char c;

int n;

int main()

manacher();

int mx=0;

int l=0,r=0;

for(int i=1;i<=cnt;i++)

mx=max(mx,len[i]);

printf("%d\n",mx-1);

//for(int i=1;i<=cnt;i++)

// printf("%d " ,len[i]);

//printf("\n");

for(int i=1;i<=cnt;i++)

if(len[i]==mx)

// printf("l=%d,r=%d\n",l,r);

//for(int i=1;i<=cnt;i++)

//printf("%d ",plc[i]);

//printf("\n");

for(int i=l;i<=r;i++)

printf("%c",fr[i]);

return

0;}

P1210 回文檢測 manacher演算法

p1210 回文檢測 manacher演算法 str2 i str2 i a a str2只取小寫字母,因為,回文大小寫都算,但字元判斷確不是這樣,所以這樣處理 len init str2 init是要返回新陣列長度的。for i 1 ii len i min maxn i,len 2 po i e...

luogu1210 回文檢測

據說如果你給無限只母牛和無限臺巨型可攜式電腦 有非常大的鍵盤 那麼母牛們會製造出世上最棒的回文。你的工作就是去尋找這些牛製造的奇觀 最棒的回文 在尋找回文時不用理睬那些標點符號 空格 但應該保留下來以便做為答案輸出 只用考慮字母 a z 和 a z 要你尋找的最長的回文的文章是乙個不超過20,000...

洛谷P1015回文數

若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個十進位制數56,將56加65 即把5656從右向左讀 得到121是乙個回文數。又如 對於十進位制數8787 step1 87 78 165 step2 165 561 726 step3 726 627 135...