題目大意:給出乙個字串s,現在可以對字串進行一次操作,具體規則是可以將字串的乙個字首在不改變順序的情況下變為其字尾,問如何操作可以使得最長回文子串的長度盡可能長,題目要求輸出最長的長度
題目分析:本來看完題目以為是需要一點思維的題目,但看完資料範圍後感覺可以直接莽一發,試了一下還真就a了,真就是個模板題唄。。
馬拉車的時間複雜度是o(n),列舉每一種子串的時間複雜度是o(n),總共時間複雜度為n*n,不知道用string類會怎樣,因為一開始就怕超時,直接用的char字串和memcpy
然後後續發現了比較簡單的實現方法,可以直接把原串複製一遍拼接起來,直接跑馬拉車就是答案了,注意如果最後答案大於原字串長度的話需要特判一下
**:
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int n=1e4+100;
char s[n*2];//預處理之後的字串
char str[n],ss[n];//原本的字串
int p[n*2];//最長回文半徑
int manacher()
s[k++]='#';
s[k]=0;
int ans=0;
p[0]=1;
int id=0,mmax=0;
for(int i=1;immax)
ans=max(ans,p[i]-1);
} return ans;
} int main()
牛客 小A的回文串 最長回文串,馬拉車演算法
題目 題目鏈結 小a只想知道給定的乙個字串的最大回文子串是多少,現在小a可以對這個字串做一些改動,他可以把這個字串最前面的某一段連續的字元 不改變順序 移動到原先字串的末尾。那麼請問小a通過這樣的操作之後 也可以選擇不移動 能夠得到最大回文子串的長度是多少。思路 1列舉所有字串 使用馬拉車演算法 2...
牛客小白月賽 小A的回文串
時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 一行乙個字串表示給定的字串s一行乙個字串表示給定的字串s一行輸出乙個整數,表示通過這樣的操作後可以得到最大回文子串的長度。示例1 複製dcbaabc複製 7將前面的...
牛客網 小A的回文串 manachar模板
小a的回文串 時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 一行乙個字串表示給定的字串s一行乙個字串表示給定的字串s一行輸出乙個整數,表示通過這樣的操作後可以得到最大回文子串的長度。題解 將輸入的字串s分成兩段...