manacher
2016-01-06 15:38
375 查看
1 void manacher(){ 2 int res = 0, id = 0; 3 for(int i = 1; i <= m; i++) { 4 if(res > i){ 5 p[i] = min(p[2 * id - i], res - i); 6 } 7 else{ 8 p[i] = 1; 9 } 10 //p[i] = mx > i? min(mp[2*id-i], mx-i): 1; 11 while(s[i + p[i]] == s[i - p[i]]){ 12 p[i]++; 13 } 14 //while(s[i+mp[i]] == s[i-mp[i]]) mp[i]++; 15 if(i + p[i] > res) { 16 res = i + p[i]; 17 id = i; 18 } 19 } 20 }
相关文章推荐
- Gym - 100637B Lunch 规律
- Gym - 100637A Nano alarm-clocks 模拟
- Gym - 100203J Journeys on the Moscow Underground
- Gym - 100203G Good elements 水+模拟
- Gym - 100203A Ariel 暴力+位运算
- Gym - 100203I I WIN 网络流
- Gym - 100203H Highways 最小生成树
- angularjs的scope深层理解
- HDU 1556 Color the ball 线段树
- Gym - 100685F Flood BFS
- Gym - 100625F Count Ways 快速幂+容斥原理
- mysql 5.6.4以上版本innodb支持全文索引的测试
- HDU 5370 Tree Maker
- HDU 5379 Mahjong tree dfs+组合数学
- Gym - 100625B Bribe
- HDU 5375 Gray Code 动归
- HDU 5371 Hotaru's problem Manacher+尺取法
- 查找字符串中对应的字符并返回数组位置
- 3D打印
- android学习笔记——SharedPreferences数据存储