【HDU6153】A Secret(扩展KMP)
来源:互联网 发布:淘宝正品耐克 编辑:程序博客网 时间:2024/06/04 18:58
记录一个菜逼的成长。。
题目链接
2017CCPC网络赛
题目大意:
给你一个字符串
问
Hint:
sample input:
abababab
aba
Suffix(S2,1) = “aba”,
Suffix(S2,2) = “ba”,
Suffix(S2,3) = “a”.
N1 = 3,
N2 = 3,
N3 = 4.
L1 = 3,
L2 = 2,
L3 = 1.
ans = (3*3+3*2+4*1)%1000000007.
笔记
先将两个字符串都
跑一遍扩展
求出
比如翻转后
可以说明
实际上这里
ps:对字符串的套路知之甚少。。orz.为什么你们什么都会。
#include <bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))typedef long long LL;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;const int maxn = 1000000 + 10;char s[maxn],p[maxn];int _next[maxn],ex[maxn];/*** 扩展KMP算法**///next[i]:x[i...m-1]与x[0...m-1]的最长公共前缀//extend[i]:y[i...n-1]与x[0...m-1]的最长公共前缀void getNext(char x[],int m,int next[]){ _next[0]=m; int j=0; while(j+1 < m && x[j] == x[j+1])j++; _next[1] = j; int k = 1; for (int i = 2; i < m; i++ ) { int p = _next[k] + k - 1; int L = _next[i-k]; if(i + L < p + 1) _next[i] = L; else { j = max(0,p-i+1); while(i+j < m && x[i+j] == x[j]) j++; _next[i] = j; k = i; } }}void EKMP(char x[],int m,char y[],int n,int next[],int extend[]){ getNext(x,m,next); int j = 0; while(j < n && j < m && x[j] == y[j])j++; extend[0] = j; int k = 0; for (int i = 1; i < n; i++) { int p = extend[k] + k - 1; int L = next[i-k]; if(i + L < p + 1)extend[i] = L; else { j = max(0,p-i+1); while(i + j < n && j < m && y[i+j] == x[j]) j++; extend[i]=j; k = i; } }}int main(){ int T;scanf("%d",&T); while(T--){ scanf("%s%s",s,p); int lens = strlen(s); int lenp = strlen(p); reverse(s,s+lens); reverse(p,p+lenp); EKMP(p,lenp,s,lens,_next,ex); LL ans = 0; for (int i = 0; i < lens; i++) { ans = (ans + (LL)ex[i] * (ex[i]+1) % MOD * 500000004LL % MOD) % MOD; } printf("%lld\n",ans % MOD); } return 0;}
阅读全文
0 0
- HDU6153 A Secret 扩展KMP
- 【HDU6153】A Secret(扩展KMP)
- [扩展kmp] hdu6153 A Secret
- hdu6153-A Secret (kmp/扩展kmp)
- hdu6153 A Secret CCPC1004 扩展KMP
- [kmp] hdu6153 A Secret
- HDU6153 A Secret(扩展KMP)2017中国大学生程序设计竞赛
- hdu6153(kmp) A Secret
- HDU6153-A Secret ex-kmp
- hdu6153(kmp) A Secret
- hdu6153 A Secret (拓展KMP)
- HDU6153-A Secret
- HDU6153-A Secret
- HDU_6153 A Secret【扩展KMP】
- hdu6153-exkmp&&脑洞-A Secret
- HDU 6153 A Secret【KMP||扩展KMP】
- hdu 6153 A Secret KMP&&扩展KMP
- HDU 6153 A Secret (扩展KMP)
- 初探Android事件分发机制源码上之从硬件出发
- Java反射
- Android中webView自适应屏幕
- HDU 5536 Chip Factory(暴力/01字典树)
- java
- 【HDU6153】A Secret(扩展KMP)
- 七、输入/输出流--IOStreamm基本类和标准IOStream对象--头文件和标准操纵符
- MFC之CreateWindowEx函数
- BufferedReader和BufferedWriter、PrintStream和PrintWriter
- SETP7 Professional V11 SP1
- Effective c++ 读书笔记
- html页面使用smarty拼接字符串
- 移动端网页适配的理解
- 查看本地起工程部署war包的地址位置