CSU 1328 近似回文詞 模擬

2021-07-30 03:57:15 字數 1277 閱讀 2140

submit page

summary

time limit: 1 sec

memory limit: 128 mb

submitted: 541

solved: 191

輸入一行文字,輸出最長近似回文詞連續子串。所謂近似回文詞是指滿足以下條件的字串:

1. s以字母開頭,字母結尾

2. a(s)和b(s)最多有2k個位置不同,其中a(s)是s刪除所有非字母字元並且把所有字母轉化成小寫之後得到的串,b(s)是a(s)的逆序串。

比如當k=1時,race cat是乙個近似回文詞,因為a(s)=racecat和b(s)=tacecar只有2個位置不同。

輸入包含不超過25組資料,每組資料報含兩行。第一行是整數k(0<=k<=200),第二行為字串s,包含至少乙個字母但不超過1000個字元(換行符不算)。s只包含字元、空格和其他可列印字元(比如逗號,句號),並且不會以空白字元開頭。

對於每組測試資料,輸出最長近似回文子串的長度和起始位置(s的第乙個字元是位置1)。如果有多個最長近似回文子串解,起始位置應盡量小。

1wow, it is a race cat!0abcdefg0kitty: madam, i'm adam.

case 1: 8 3case 2: 1 1case 3: 15 8

湖南省第九屆大學生計算機程式設計競賽

先存字串去掉空格,統一成大寫或小寫,然後從中間向兩邊判斷,分奇數和偶數兩種不同的情況,奇數向兩邊判斷i-j,i+j,偶數i-j,i+j+1

#include#include#include#define maxn 1000+5

using namespace std;

char buf[maxn],s[maxn];

int p[maxn];

int main()

--j;

x=p[i-j],y=p[i+j];

if(y-x+1>maxx)

maxx=y-x+1,star=x;

for(cnt=j=0;i-j>=0&&i+j+1k)break;

}--j;

if(j<=-1)continue;//排除意外情況

x=p[i-j],y=p[i+j+1];

if(y-x+1>maxx)

maxx=y-x+1,star=x;

}printf("case %d: %d %d\n",t++,maxx,star+1);

}return 0;

}

CSU 1328 近似回文詞

輸入一行文字,輸出最長近似回文詞連續子串。所謂近似回文詞是指滿足以下條件的字串 1.s以字母開頭,字母結尾 2.a s 和b s 最多有2k個位置不同,其中a s 是s刪除所有非字母字元並且把所有字母轉化成小寫之後得到的串,b s 是a s 的逆序串。比如當k 1時,race cat是乙個近似回文詞...

CSU 1328 近似回文詞

省賽的a題。現場都沒什麼人做。其實就一暴力水題。坑死了。time limit 1 sec memory limit 128 mb submit 13 solved 8 submit status web board 輸入一行文字,輸出最長近似回文詞連續子串。所謂近似回文詞是指滿足以下條件的字串 1....

CSU 1328 近似回文詞(最長回文子串變形)

description 輸入一行文字,輸出最長近似回文詞連續子串。所謂近似回文詞是指滿足以下條件的字串 s以字母開頭,字母結尾 a s 和b s 最多有2k個位置不同,其中a s 是s刪除所有非字母字元並且把所有字母轉化成小寫之後得到的串,b s 是a s 的逆序串。比如當k 1時,race cat...