题解 P7469 【[NOI Online 2021 提高组] 积木小赛】
大概是目前题解区最短的了。
因为
固定 long long 大模数就行了)存到一个数组
枚举完了以后,把
时间复杂度其实也是
#include <bits/stdc++.h>
using namespace std;
const int N = 3005, BASE = 51971;
const long long M = 2005091020050911;
int n;
char a[N], b[N];
long long t[N * N];
int main()
{
scanf("%d %s %s", &n, a + 1, b + 1);
for(int i = 1; i <= n; i++)
{
long long v = 0; int p = 1;
for(int j = i; j <= n; j++)
{
while(p <= n && a[p] != b[j]) p++;
if(p > n) break;
p++;
v = (1LL * v * BASE + b[j] - 'a' + 1) % M;
t[++t[0]] = v;
}
}
sort(t + 1, t + t[0] + 1);
printf("%d\n", unique(t + 1, t + t[0] + 1) - t - 1);
return 0;
}