HDU 6153 A secret(kmp)
来源:互联网 发布:图片修复软件免费版 编辑:程序博客网 时间:2024/06/07 09:59
似乎正解是扩展kmp的模版题.
但是kmp也可以做.
kmp有两种.一种是在每一次成功匹配后都算一次.
这种是正解呢.
因为kmp,其实就是遍历了所有会有重叠的情况,但是一些毫无可能的就被忽略了,但是我们只记录成功匹配一个之后的情况的话,会有在while中的匹配被忘记.所以没一个成功匹配到之后,都有他的next被忽略了.
一种是在结束匹配是算一次,这种要等差数列计算.
反正这题很迷幻.
靠我总结不下去了,还是不懂啊.
就当存个kmp,我好菜啊
/* Farewell. */#include <iostream>#include <vector>#include <cstdio>#include <string.h>#include <cstring>#include <algorithm>#include <queue>#include <map>#include <string>#include <cmath>#include <bitset>#include <iomanip>#include <set>using namespace std;#define gcd __gcd#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define MP make_pair#define MT make_tuple#define PB push_backtypedef long long LL;typedef unsigned long long ULL;typedef pair<int,int > pii;typedef pair<LL,LL> pll;typedef pair<double,double > pdd;typedef pair<double,int > pdi;const int INF = 0x7fffffff;const LL INFF = 0x7f7f7f7fffffffff;#define debug(x) std::cerr << #x << " = " << (x) << std::endlconst int MAXM = 5e3+17;const int MOD = 1e9+7;const int MAXN = 1e6+17;char s[MAXN],p[MAXN];string tmp;LL Next[MAXN];LL arv[MAXN];void getNext(string p){ memset(Next, 0, sizeof(Next)); int m = p.length(); int i = 0,j = -1; Next[0] = -1; while (i < m) { if (j == -1 || p[i] == p[j]) { i++;j++; Next[i] = j; }else j = Next[j]; }}void kmp(string s,string p){ memset(arv, 0, sizeof(arv)); int i = 0, j = 0,n = s.length(),m = p.length(); getNext(p); for(int i =0 ;i<n;++i) { while(j > 0 && s[i] != p[j]) { arv[j]++; j = Next[j]; } if(s[i] == p[j]) j++; if(j == m) { arv[j]++; j = Next[j]; } }}int main(int argc, char const *argv[]){ #ifdef GoodbyeMonkeyKing freopen("in.txt","r",stdin);freopen("out.txt","w",stdout); #endif int t; cin>>t; while(t--) { scanf("%s%s",s,p); string a(s,&s[strlen(s)]); string b(p,&p[strlen(p)]); reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); kmp(a,b); LL ans = 0; for (LL i = 0; i <= b.length(); ++i) ans = (ans+(1LL*arv[i]*(1LL*(i+1)*i)/2)%MOD)%MOD; cout<<ans%MOD<<endl; } return 0; }
阅读全文
0 0
- hdu 6153 A Secret KMP
- HDU 6153 A Secret KMP
- HDU 6153 A Secret KMP
- Hdu 6153 A Secret【KMP】
- 【KMP】HDU 6153 A Secret
- HDU 6153 A Secret(KMP)
- hdu 6153 A Secret (kmp)
- hdu 6153 A Secret (KMP)
- hdu 6153 A Secret(KMP)
- hdu 6153 A Secret(KMP)
- HDU 6153 A secret(kmp)
- HDU 6153 A Secret【KMP||扩展KMP】
- hdu 6153 A Secret KMP&&扩展KMP
- HDU 6153-A Secret(kmp&&ccpc)
- HDU 6153 A Secret(KMP)
- HDU 6153 A Secret (扩展KMP)
- HDU 6153A Secret(kmp)
- HDU 6153 A Secret 经典扩展KMP
- 11.8学习心得
- 数据结构之数组
- 爽!MaxCompute老铁们再也不用点点点了!
- Spring 事务管理
- git apply -v 提示 Skipped patch 打不上patch的解决办法
- HDU 6153 A secret(kmp)
- 前端技术汇总与框架介绍-node篇(不断更新中)
- spring整合rabbitMQ代码实例
- 51nod 1122 机器人走方格 V4【组合数学】【矩阵乘法】
- 不定长顺序栈
- wxpy识别语音消息
- angularjs ajax无刷新下载
- JS获取当前年份,添加到HTML标签 select 的 option里
- (实战项目三)新浪网分类资讯爬虫