http://www.lydsy.com/JudgeOnline/problem.php?id=3670
Test instructions: too much water = =
#include <bits/stdc++.h>using namespace Std;const int n=1000005, Mo=1000000007;int N, P[n], pos[n], num[n], Tot;cha R s[n];bool vis[n];void dfs (int x) {if (p[x]) DFS (p[x]); vis[x]=1; pos[++tot]=x;} void work (int x) {Tot=0;dfs (x); for (int i=1, j=0; i<=tot; ++i) {while (pos[j+1]*2<=pos[i]) ++j;num[pos[i]]=j;}} void CLR () {memset (p, 0, sizeof (int) * (n+1)), memset (Vis, 0, sizeof (BOOL) * (n+1)), memset (num, 0, sizeof (int) * (n+1));} int main () {int T; scanf ("%d", &t), while (t--) {scanf ("%s", s+1), N=strlen (s+1); int j=0;for (int i=2; i<=n; ++i) {Whil E (J && S[j+1]!=s[i]) j=p[j];if (s[j+1]==s[i]) ++j;p[i]=j; for (int i=n; i>=1;-i) if (!vis[i]) work (i); long long ans=1;for (int i=1; i<=n; ++i) (ans*= (num[i]+1))%=mo;printf ("% Lld\n ", ans); CLR ();} return 0;}
This problem is put in noi= = no Language = =
It's probably just a casual mess.
"Bzoj" 3670: [Noi2014] Zoo