#include<stdio.h>
#include<string.h>
#define maxn 501000
char s[maxn],t[maxn];
int next[maxn],extand1[maxn],extand2[maxn];
int ans[],sum[maxn];
void getnext(int *next,char *t)
{
int i,k,j,len=strlen(t);
next[]=len;
i=;
while(i<len-&&t[i]==t[i+])
{
i++;
}
next[]=i;
int a=;
for(k=;k<len;k++)
{
int p=next[a]+a-;
int l=next[k-a];
if(k-+l>=p)
{
int j=p-k+>?p-k+:;
while(k+j<len&&t[k+j]==t[j])
j++;
next[k]=j;
a=k;
}
else next[k]=l;
}
}
void ekmp(char *s,char *t,int *next,int *extand)
{
int i,j,slen=strlen(s),tlen=strlen(t),k;
getnext(next,t);//求next数组
/*
for(i=0;i<tlen;i++)
printf("%d ",next[i]);
printf("\n");
*/
int minlen=slen<tlen?slen:tlen;
int a=;
while(a<minlen&&s[a]==t[a]) a++;
extand[]=a;
a=; for(k=;k<slen;k++)
{
int p=a+extand[a]-;
int l=next[k-a];
if(k-+l>=p)
{
int j=p-k+>?p-k+:;
while(k+j<slen&&j<tlen&&s[k+j]==t[j])
j++;
extand[k]=j;
a=k;
}
else extand[k]=l;
}
/*for(i=0;i<slen;i++)
printf("%d ",extand[i]);
printf("\n");*/
}
int main()
{
int i,j,te;
scanf("%d",&te);
while(te--)
{
for(i=;i<;i++)
scanf("%d",&ans[i]);
scanf("%s",s);
int len=strlen(s);
for(i=;i<len;i++)
{
t[len-i-]=s[i];
if(i==)
sum[i]=ans[s[i]-'a'];
else
sum[i]=sum[i-]+ans[s[i]-'a'];
}
t[len]='\0';
ekmp(s,t,next,extand1);//s做主串
ekmp(t,s,next,extand2);//t做主串 /*for(i=0;i<len;i++)
{
printf("%d ",extand1[i]);
}
printf("\n");
for(i=0;i<len;i++)
{
printf("%d ",extand2[i]);
}
printf("\n");*/ int max=-;
int ret;
for(i=;i<len;i++)
{
ret=;
if(extand1[i]+i==len)
{
ret+=sum[len-]-sum[i-];
}
if(extand2[len-i]==i)//len-i表示t中的位置
{
ret+=sum[i-];
}
if(ret>max)
max=ret;
}
printf("%d\n",max);
}
}

最新文章

  1. android Envieroment类
  2. sprint3(第四天)
  3. VI编辑器学习笔记
  4. 1497: [NOI2006]最大获利 - BZOJ
  5. css中图片的四种地址引用
  6. 让 IE6/7/8 也支持HTML5标签的方式
  7. 你以为你了解最常用的string.substring()的几个常见问题吗?
  8. java提高篇(十二)-----equals()
  9. Python 模块之 string.py
  10. Quartz源码分析
  11. Matlab: 白噪声与曲线拟合
  12. 一个tomcat设置多个端口,多个端口对应多个应用
  13. Lesson 3-1(语句:条件语句)
  14. Day10--Python--动态传参,作用域
  15. JS实现表格使用上下左右键聚集
  16. SQL Server关于WITH CUBE、WITH ROLLUP和GROUPING使用
  17. ASP.NET Core2.1 中如何使用 Cookie和Session
  18. Jdk在window环境下的安装与配置详解
  19. 洛谷 P1412 经营与开发 解题报告
  20. android开发,权限获取

热门文章

  1. 《MapReduce: Simplified Data Processing on Large Cluster 》翻译
  2. 【读书笔记《Android游戏编程之从零开始》】15.游戏开发基础(剪切区域)
  3. HDU 4902 Nice boat --线段树(区间更新)
  4. 最长公共子序列模板(LCS)和LICS模板
  5. Docker云Paas平台部署:Docker+Mesos+Marathon
  6. xcode的菜单栏功能解析
  7. HTML语义化之常见模块
  8. Android中asset文件夹和raw文件夹区别
  9. 《深入理解计算机系统》深入实践之——vim深入研究
  10. Atom使用心得 - 21世纪的编辑器