标签:ted output present beautiful tor value das rom 枚举
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
http://acm.hdu.edu.cn/showproblem.php?pid=3613
#include<cstdio> #include<cstring> #include<algorithm> #define N 500011 using namespace std; int T,val[27]; int sum[N],len,m,ans; int id,pos,x,p[N*2]; bool pre[N],suf[N]; char s[N],ss[N*2]; void manacher() { ss[m=0]=‘!‘; for(int i=1;i<=len;i++) { ss[++m]=‘#‘; ss[++m]=s[i]; } ss[++m]=‘#‘; ss[m+1]=‘@‘; id=pos=0; for(int i=1;i<m;i++) { if(pos>i) x=min(p[2*id-i],pos-i); else x=1; while(ss[i+x]==ss[i-x]) x++; p[i]=x; if(i+x>pos) { pos=i+x; id=i; } if(i-p[i]==0) pre[p[i]-1]=true; if(i+p[i]==m+1) suf[p[i]-1]=true; } } int main() { scanf("%d",&T); while(T--) { memset(pre,0,sizeof(pre)); memset(suf,0,sizeof(suf)); memset(sum,0,sizeof(sum)); ans=-0x7fffffff; for(int i=0;i<26;i++) scanf("%d",&val[i]); scanf("%s",s+1); len=strlen(s+1); for(int i=1;i<=len;i++) sum[i]=sum[i-1]+val[s[i]-‘a‘]; manacher(); for(int i=1;i<len;i++) ans=max(ans,sum[i]*pre[i]+(sum[len]-sum[i])*suf[len-i]); printf("%d\n",ans); } }
标签:ted output present beautiful tor value das rom 枚举
原文地址:http://www.cnblogs.com/TheRoadToTheGold/p/7039321.html