FZU 2275-KMP
来源:互联网 发布:java 反射找不到注解 编辑:程序博客网 时间:2024/05/29 16:50
题目链接
这是一道字符串匹配题,如果使用一般的字符串匹配会超时,所以可以采用KMP算法来减小时间复杂度,感谢只有你和v_JULY_v的博客。
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;char s[1000005], t[1000005], tmp[1000005];int nextl[1000005];int ls, lt;void getnext(){ nextl[0] = -1; for (int i = 1; i<lt; i++) { int j = nextl[i - 1]; while (t[j + 1] != t[i] && j>-1) j = nextl[j]; nextl[i] = (t[j + 1] == t[i]) ? j + 1 : -1; }}int kmp(char *a, char *b){ getnext(); int sum = 0, i = 0, j = 0; while (i<ls&&j<lt) { if (j == -1 || a[i] == b[j]) i++, j++; else j = nextl[j]; } if (j == lt) return 1; return 0;}int main(){ int n; cin >> n; while (n--) { cin >> s >> t; ls = strlen(s), lt = strlen(t); if (ls<lt) { printf("Bob\n"); continue; } if (kmp(s, t) || !strcmp(t, "0")) { printf("Alice\n"); continue; } reverse(t, t + lt); if (kmp(s, t)) { printf("Alice\n"); continue; } printf("Bob\n"); } return 0;}
KMP模板
void getnext(){ next[0]=-1; for(int i=1;i<n;i++) { int j=next[i-1]; while(t[j+1]!=t[i]&&j>-1) j=next[j]; next[i]=(t[j+1]==t[i])?j+1:-1; }}int kmp(){ int i=j=0; while(i<slen&&j<plen) { if(j==-1||s[i]==p[j]) i++,j++; else j=next[j]; } return (j==plen)?i-j:-1;}
阅读全文
0 0
- FZU 2275-KMP
- fzu 2275 Game KMP
- FZU 2275 Game (KMP)
- FZU 2275 Game(KMP)
- FZU 1481 KMP
- FZU-1926+KMP
- FZU 2122(KMP)
- fzu 1901 Period II(KMP)
- FZU 1901 Period II (KMP)
- fzu 1926 填空 【kmp字符串匹配】
- FZU 2122 又见LKity (KMP)
- fzu 1901 Period II (KMP)
- FZU 题目1901 Period II (KMP)
- FZU 1901 Period II (kmp)
- FZU 1901 Period II (KMP+技巧)
- FZU 1901 Period II(KMP)
- FZU Problem 1926 填空(KMP好题一枚,确实好)
- FZU 1901+kmp的next数组的应用
- mysql当前日期函数应用
- Java并发编程:volatile关键字解析
- 亲历H5移动端游戏微信支付接入及那些坑(三)——支付接入
- Oracle拾遗
- Unity3d之设计模式(一)单例模式
- FZU 2275-KMP
- 【bzoj2151】种树
- 常用的PyCharm快捷键
- EF 的 code first 数据迁移
- MB Link 权限声明
- 打开新窗口引入样式
- Linux驱动入门总结
- openpyxl代码实例
- BZOJ 2141 排队 [分块+树状数组]