hdu 3613 扩展kmp求回文串
来源:互联网 发布:特效字幕制作软件 编辑:程序博客网 时间:2024/06/07 23:56
新建一个串为给定串的反转,
原串跟新串匹配求得是前缀回文,
新串跟原串匹配求得是后缀回文。
#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<iostream>#include<vector>using namespace std;int va[30],pre[510000],last[510000],nexta[510000],nextb[510000],l;string a,b;bool sumPre[510000],sumLast[510000];void getNext(string a,int *nexta,int la){ int i=0,j = -1; nexta[0] = -1; while(i<la) { if(a[i]==a[j]||j==-1) { i++,j++; nexta[i] = j; } else j = nexta[j]; }}void kmp(string a,int la,string b,int *nexta,bool *sum){ int i=0,j=0; while(j<l) { if(a[i]==b[j]||i==-1) { i++;j++; } else i = nexta[i]; } int pre = i; while(pre) { sum[pre] = true; pre = nexta[pre]; }}int main(){ int t; ios::sync_with_stdio(false); scanf("%d",&t); while(t--) { for(int i=0;i<26;i++) scanf("%d",&va[i]); cin>>a; l = a.size(); int sum = 0; for(int i=0;i<=l;i++) { sumPre[i] = false; sumLast[i] = false; } for(int i=0;i<l;i++) { sum+=va[a[i]-'a']; pre[i] = sum; } sum = 0; for(int i=l-1;i>=0;i--) { sum+=va[a[i]-'a']; last[i] = sum; } b = a; reverse(b.begin(),b.end()); getNext(a,nexta,l); kmp(a,l,b,nexta,sumPre); getNext(b,nextb,l); kmp(b,l,a,nextb,sumLast); int ans = -1000000000; for(int i=0;i<l-1;i++) { sum = 0; //printf("%d %d\n",sumPre[i+1],sumLast[l-i-1]); if(sumPre[i+1])sum+=pre[i]; if(sumLast[l-i-1])sum+=last[i+1]; ans = max(ans,sum); } printf("%d\n",ans); } return 0;}
0 0
- hdu 3613 扩展kmp求回文串
- HDU 3613 Best Reward(扩展KMP的应用:回文串判断+扩展KMP模板)
- HDU 3613 Best Reward(拓展KMP求前缀回文串)
- HDU 3613 Best Reward(扩展KMP:回文判断)
- HDU 3608 最长回文(扩展KMP)
- poj 3376 扩展kmp求回文加字典树
- Poj 3376 回文串,扩展kmp
- Best Reward (扩展KMP+回文串)
- HDU 3613 Best Reward(求前后缀回文 拓展KMP or Manacher)
- hdu 3613 扩展KMP运用
- 回文子串对(扩展kmp-kmp与回文子串)
- HDU 4333 浅谈扩展KMP 线性求NXT数组模板
- hdu 4333 kmp+扩展kmp
- KMP算法求公共回文子串的个数
- HDU 3613Best Reward(扩展KMP解法)
- hdu 3613 Best Reward 扩展kmp
- hdu 3613 Best Reward (kmp扩展)
- HDU 3613 Best Reward(扩展KMP)
- 1.微信开发
- Android中的权限系统
- Express4+Angularjs+Bootstrap3环境搭建
- HADOOP-RPC机制
- EasyUI小图标设置
- hdu 3613 扩展kmp求回文串
- Spring AOP 动态多数据源
- SSH框架入门(一)——Struts2基础及查错步骤
- list遍历
- [Genymotion] Unable to start the virtual device
- Java中级开发工程师知识点归纳
- luogg_java重新学习_第二章:基本语法01(概念)
- TabLayout
- [数据集]新浪微博数据集MicroblogPCU