http://blog.csdn.net/u013368721/article/details/42100363  回文树

建立两棵回文树,然后count处理一遍就可以了,然后顺着这两棵树的边走下去就好了

#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>
#include <cstdio>
using namespace std;
const int maxn=;
const int sign_size=;
struct Palind_Tree{
int next[maxn][sign_size];
int fail[maxn];
int cnt[maxn];
int num[maxn];
int len[maxn];
int S[maxn];
int last;
int n;
int p;
int newnode(int l)
{
for(int i=; i<sign_size; i++)next[p][i]=;
cnt[p]=;
num[p]=;
len[p]=l;
return p++;
}
void init()
{
p=;
newnode();
newnode(-);
last=;
n=;
S[n]=-;
fail[]=;
}
int get_fail(int x)
{
while(S[n-len[x]-]!=S[n])x=fail[x];
return x;
}
void add(int c)
{
c-='a';
S[++n]=c;
int cur=get_fail(last);
if(next[cur][c]==)
{
int now=newnode(len[cur]+);
fail[now]=next[get_fail( fail[cur] )][c];
next[cur][c]=now;
num[now]=num[fail[now]]+;
}
last=next[cur][c];
cnt[last]++;
}
void count()
{
for(int i=p-; i>=; --i)cnt[fail[i]]+=cnt[i];
}
}T1,T2;
char S[maxn],S2[maxn];
long long ans=;
void dfs(int u,int v)
{
for(int i=; i<sign_size; i++)
{
int x=T1.next[u][i],y=T2.next[v][i];
if(x&&y)
{
ans+=(long long)T1.cnt[x]*T2.cnt[y];
dfs(x,y);
}
}
}
int main()
{
int cas;
scanf("%d",&cas);
for(int cc=; cc<=cas; cc++)
{
scanf("%s%s",S,S2); T1.init();
T2.init();
int len1=strlen(S);
int len2=strlen(S2);
for(int i=; i<len1; i++)
T1.add(S[i]);
for(int i=; i<len2; i++)
T2.add(S2[i]);
T1.count();
T2.count();
ans=;
dfs(,);
dfs(,);
printf("Case #%d: %I64d\n",cc,ans);
}
return ;
}

最新文章

  1. Java开发中的23种设计模式详解
  2. C# DateTime 格式化 奇怪问题!
  3. JS中函数的调用和this的值
  4. DataTable去除重复行,根据某一字段进行distinct
  5. sql问题集合
  6. ASP.NET MVC 数据库依赖缓存的实现
  7. java.lang.ClassNotFoundException: net.sf.json.JSONArray,java.lang.NoClassDefFoundError: net/sf/json/JSONArray jetty跑项目遇到的问题
  8. Static Resources In ASP.NET Core 1.0
  9. python模块之time
  10. Linux文件查找工具之find “大宝剑”--转载
  11. solace
  12. JavaPersistenceWithHibernate第二版笔记Getting started with ORM-001用JPA和Hibernate实现HellowWorld(JTA、Bitronix)
  13. Spring JTA multiple resource transactions in Tomcat with Atomikos example--转载
  14. 【nodejs】创建udp套接字的类型参数的含义
  15. Java数据结构: java.util.BitSet源码学习
  16. [LeetCode][Python]Tow Sum
  17. Window检测网络连接情况
  18. plw的骰子
  19. eclipse连接mysql数据库实现怎删改查操作实例(附带源码)
  20. 向java高级工程师和项目经理的道路进发【转】

热门文章

  1. SpringBoot 推荐博客
  2. 导出jqgrid表格数据为EXCEL文件,通过tableExport.js插件。
  3. 服务器tail输出正常,vim打开中文乱码
  4. python让实例作用于for循环并当做list来使用
  5. 完美:利用旧版iCloud更改Apple ID地区
  6. pytest 3.9在python 2.7下的一个bug
  7. Ubuntu系统安装nginx
  8. mac iterm 提示符序列调整
  9. Oracle课程档案,第十六天
  10. java中的静态代理和动态代理