nxt数组为KMP的next数组num[i]储存了i前面可以匹配的串的个数.先在KMP求nxt中顺便求出num最后再找到对于i的最大的前后缀不重叠的可匹配的j,ans*=(num[j]+1)%1000000007ans即为答案 #include<cstdio> #include<cstring> using namespace std; ]; ],num[],n; long long ans; void doit(char *s){ int n=strlen(s); nxt[]=-…
link : https://loj.ac/problem/2246 水水KMP #include<bits/stdc++.h> #define ll long long #define maxn 1000005 using namespace std; const int ha=1000000007; char s[maxn]; int f[maxn],g[maxn]; int n,T; int main(){ scanf("%d",&T); while(T--)…
[NOI2014]起床困难综合症 按位贪心 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #define maxn 100010 using namespace std; int n, m; int tp[maxn], v[maxn]; int getans(int final, int p){ for(int i = 1; i <= n; i…