hpuoj回文串問題 manacher kmp

2022-03-29 04:25:12 字數 1783 閱讀 6700

還是回文串問題,字串是啥,大家應該都知道,就是滿足 s[i] = s[l - i + 1] (1 <= i <= l)的串,現在遇到了乙個問題,就是想問你乙個字串最少在後邊加幾個字元可以形成乙個回文串,並最後輸出形成的回文串

輸入包括多組資料,每組資料報含乙個字串

輸出轉換後的回文字串

add cigartragic dxhisgirl acaba abczyxyz

adda cigartragic dxhisgirlrigsihxd acabaca abczyxyzcba

題解:manacher,隨著陣列往前走,更新m和r,l沒什麼用,其實就是2*m-r,所以只需要管m和r就好了,由於多了"#"所以此時的值就是回文長度;只需要計算結尾處的最長回文就好了,以前做過類似題。。。

**:

#include#include#include#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

#define mem(x,y) memset(x,y,sizeof(x))

#define si(x) scanf("%d",&x)

#define sl(x) scanf("%lld",&x)

#define pi(x) printf("%d",x)

#define pl(x) printf("%lld",x)

#define p_ printf(" ")

#define t_t while(t--)

#define f(i,s,x) for(i=s;ii)p[i]=min(p[2*mid-i],r-i);

// else//仔細想了想,這段不要就可以,只不過可能耗時了一些;但是本校oj資料弱,就ac了。。。

p[i]=1;

while(s[i+p[i]]==s[i-p[i]])p[i]++;

if(p[i]+i>r)r=p[i]+i,mid=i;

if(r==len)ans=max(ans,p[i]);

} return ans-1;

}int main()

s[len*2+1]='#';s[len*2+2]='\0';

int ans=manacher();

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

printf("%s",a);

for(i=len-ans-1;i>=0;i--)printf("%c",a[i]);puts("");

} return 0;

}

kmp一遍a;

**:

#include#include#include#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

#define mem(x,y) memset(x,y,sizeof(x))

#define si(x) scanf("%d",&x)

#define sl(x) scanf("%lld",&x)

#define pi(x) printf("%d",x)

#define pl(x) printf("%lld",x)

#define p_ printf(" ")

#define t_t while(t--)

#define f(i,s,x) for(i=s;i=0;i--)printf("%c",a[i]);puts("");

} return 0;

}

hpuoj回文串問題 manacher kmp

還是回文串問題,字串是啥,大家應該都知道,就是滿足 s i s l i 1 1 i l 的串,現在遇到了乙個問題,就是想問你乙個字串最少在後邊加幾個字元可以形成乙個回文串,並最後輸出形成的回文串 輸入包括多組資料,每組資料報含乙個字串 輸出轉換後的回文字串 add cigartragic dxhis...

hpuoj 語文問題

時間限制 1 sec 記憶體限制 128 mb 提交 27 解決 8 提交 狀態 討論版 轉眼間一學期就將要過去了,楊八方也在大學裡經歷了許多事情,最難忘的自然是學校裡的各色課程。楊八方很喜歡中國的古典文化,所以當她知道大學有語文課的時候是很開心的。更幸運的是,楊八方的語文老師是位酷酷的男性。第一次...

回文串問題

乙個字串,如果從左到右讀和從右到左讀是完全一樣的,比如 aba 我們稱其為回文串。現在給你乙個字串,可在任意位置新增字元,求最少新增幾個字元,才能使其變成乙個回文串。輸入格式 任意給定的乙個字串,其長度不超過1000.輸出格式 能變成回文串所需新增的最少字元數。輸入樣例 在這裡給出一組輸入。例如 a...