2 条题解
-
0
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N=2e6+5; int n, f[N], q[N]; char s[N]; int main() { scanf("%d%s", &n, s+1); LL ans=0; memset(f, 0, sizeof(f)); for(int i=1; i<=n; i++) { q[i] = i-1; while(q[i] > 0 && s[q[i]] != s[i]) { q[i] = q[q[i]] - 1;} if(q[i] > 0) f[i] = f[q[i]-1] + 1; ans += f[i]; } printf("%lld\n", ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=2e6+5; int n,f[N],q[N]; char s[N]; LL ans; int main() { scanf("%d%s",&n,s+1); LL ans=0; memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) { q[i]=i-1; while(q[i]>0 && s[q[i]]!=s[i]) { q[i]=q[q[i]]-1; } if(q[i]>0) f[i]=f[q[i]-1]+1; ans+=f[i]; } printf("%lld\n",ans); return 0; }
- 1
信息
- ID
- 1967
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 22
- 已通过
- 9
- 上传者