浅谈\(Manacher\):https://www.cnblogs.com/AKMer/p/10431603.html

题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=2084

题目求的就是偶数长度回文串个数。不过匹配从相等变成了异或等于\(1\),在\(Manacher\)算法上稍作改进即可。

时间复杂度:\(O(n)\)

空间复杂度:\(O(n)\)

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=1e6+5; int n,ans;
int p[maxn];
char s[maxn]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} int main() {
n=read(),scanf("%s",s+1);
for(int i=n;i;i--)
s[i<<1]=s[i],s[(i<<1)-1]='#';
s[0]='$',s[n<<1|1]='#',n=n<<1|1;
int id=0,mx=0;
for(int i=1;i<=n;i++) {
p[i]=i<=mx?min(mx-i+1,p[(id<<1)-i]):1;
while(s[i-p[i]]-'0'+s[i+p[i]]-'0'==1||s[i-p[i]]=='#')p[i]++;
if(s[i]=='#')ans+=(p[i]-1)/2;
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. DWG2SHP DXF2SHP 如何把AutoCAD的DWG,DXF文件转换为Esri ArcGIS的Shape文件
  2. 读jQuery源码 - Deferred
  3. js格式化数字和金额
  4. Scala 中的函数式编程基础(三)
  5. 查看LINUX当前负载
  6. 分享Kali Linux 2016.2最新镜像201609
  7. 强调语气&lt;strong&gt;和&lt;em&gt;标签,文字设置单独样式&lt;span&gt;
  8. 【BZOJ2653】【主席树+二分】middle
  9. DHTML【6】--CSS
  10. javascript链式调用实现方式总结
  11. 服务器是R710常见错误汇总:
  12. JS对象或属性的不变性
  13. mysql初学,mysql修改,mysql查找,mysql删除,mysql基本命令
  14. qt中的tcp编程
  15. 网络服务器操作命令telnet
  16. Spring Security入门(2-3)Spring Security 的运行原理 4 - 自定义登录方法和页面
  17. Confluence 6 使用 JConsole 监控远程 Confluence
  18. BigDecimal最基础用法【转】
  19. 利用GDI+处理图像的色彩
  20. python 读取二进制数据到可变缓冲区中

热门文章

  1. nginx官网下载&amp;百度云分享
  2. Hibernate与JDBC、EJB、JDO的比较
  3. java.util.logging.Logger_01
  4. tensorflow conv2d的padding解释以及参数解释
  5. spring3: 对JDBC的支持 之 Spring提供的其它帮助 SimpleJdbcInsert/SimpleJdbcCall/SqlUpdate/JdbcTemplate 生成主键/批量处理
  6. urllib.urlretrieve远程下载
  7. 【spark】连接Hbase
  8. 【spark】RDD创建
  9. 服务器(Ubuntu 12.04 LTS)上编译基于OpenCV的项目遇到的问题及解决方案
  10. 《转》浅谈EJB