P5410 【模板】擴充套件 KMP(Z 函式)
思路:
擴充套件kmp模板題,程式碼來自XHT
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 2e7 + 7;
int n, m, z[maxn], p[maxn];
char a[maxn], b[maxn];
inline void Z(char *s, int n) {
for (int i = 1; i <= n; i++) z[i] = 0;
z[1] = n;
for (int i = 2, l = 0, r = 0; i <= n; i++) {
if (i <= r) z[i] = min(z[i-l+1], r - i + 1);
while (i + z[i] <= n && s[i+z[i]] == s[z[i]+1]) ++z[i];
if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1;
}
}
inline void exkmp(char *s, int n, char *t, int m) {
Z(t, m);
for (int i = 1; i <= n; i++) p[i] = 0;
for (int i = 1, l = 0, r = 0; i <= n; i++) {
if (i <= r) p[i] = min(z[i-l+1], r - i + 1);
while (i + p[i] <= n && s[i+p[i]] == t[p[i]+1]) ++p[i];
if (i + p[i] - 1 > r) l = i, r = i + p[i] - 1;
}
}
int main() {
scanf("%s%s",a + 1, b + 1);
n = strlen(a + 1),m = strlen(b + 1);
exkmp(a,n, b, m);
ll ans = 0;
for(int i = 1;i <= m;i++) {
ans ^= 1ll * i * (z[i] + 1);
}
printf("%lld\n",ans);
ans = 0;
for(int i = 1;i <= n;i++) {
ans ^= 1ll * i * (p[i] + 1);
}
printf("%lld\n",ans);
return 0;
}
相關文章
- Z 函式(擴充套件KMP)函式套件KMP
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Kotlin擴充套件函式Kotlin套件函式
- 專題十六 KMP & 擴充套件KMP & Manacher【Kuangbin】KMP套件
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- es6-函式擴充套件函式套件
- manacher || 擴充套件kmp -- Best Reward HDU - 3613套件KMP
- Kotlin-常用擴充套件函式Kotlin套件函式
- HIVE自定義函式的擴充套件Hive函式套件
- Kotlin基礎 — 擴充套件函式Kotlin套件函式
- ES6之函式的擴充套件函式套件
- PHP的Sodium加密擴充套件函式了解PHP加密套件函式
- Kotlin的幾個擴充套件函式Kotlin套件函式
- JMeter擴充套件開發:自定義函式JMeter套件函式
- PHP的SPL擴充套件庫(四)函式PHP套件函式
- 擴充套件表示式套件
- 神奇的字串匹配:擴充套件KMP演算法字串匹配套件KMP演算法
- PHP的Mhash擴充套件函式的學習PHP套件函式
- 寫擴充套件性好的程式碼:函式套件函式
- Kotlin委託 & 擴充套件 & 高階函式Kotlin套件函式
- 編寫自己的php擴充套件函式 (轉)PHP套件函式
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- flask路由系統、偏函式、CBV、模板、請求響應、session、請求擴充套件Flask路由函式Session套件
- 重學ES6 函式的擴充套件(上)函式套件
- ES6入門之函式的擴充套件函式套件
- 奇技淫巧之Kotlin 擴充套件函式(一)Kotlin套件函式
- 編寫自己的php擴充套件函式(一) (轉)PHP套件函式
- Flutter巢狀深?擴充套件函式了解一下Flutter巢狀套件函式
- 學習PHP中統計擴充套件函式的使用PHP套件函式
- Android - 利用擴充套件函式為Bitmap新增文字水印Android套件函式
- Kotlin擴充套件函式與屬性原理解析Kotlin套件函式
- Kotlin 常見內聯擴充套件函式的使用Kotlin套件函式
- 充分利用Windows API擴充套件Delphi函式 (轉)WindowsAPI套件函式
- 淺談Kotlin語法篇之擴充套件函式(五)Kotlin套件函式
- 使用高階函式實現類的擴充套件設計函式套件
- [kuangbin帶你飛]專題十六 KMP & 擴充套件KMP & Manacher - I - Simpsons’ Hidden TalentsKMP套件
- WCF擴充套件:行為擴充套件Behavior Extension套件