题意:
称序列 KaTeX parse error: Expected group after '_' at position 2: x_̲ 和序列
匹配,当且仅当
且对
给定长度为
的序列
和长度为
的序列
.
序列
的第
项为
序列
的第
求序列
的所有子序列(可不连续)中与序列
匹配的序列数目。
从后往前枚举合法的
同时对
维护到目前为止
的出现次数。
然后枚举合法的 分类讨论可快速求合法的 的数量,即对答案的贡献。
AC代码:
const int N = 3e2 + 5;
int n, a[N], b[4];
bool vis[4][4];
int cnt[N];
ll ans;
int main()
{
sd(n);
rep(i, 1, n)
sd(a[i]);
rep(i, 0, 3)
{
sd(b[i]);
rep(j, 0, i - 1)
vis[j][i] = b[j] == b[i];
}
for (int a2 = n - 1; a2 > 2; a2--)
{
cnt[a[a2 + 1]]++;
rep(a0, 1, a2 - 2)
{
if (vis[0][2] ^ (a[a0] == a[a2]))
continue;
rep(a1,a0+1,a2-1)
{
if (vis[1][2] ^ (a[a1] == a[a2]))
continue;
if (vis[0][1] ^ (a[a0] == a[a1]))
continue;
if (vis[0][3])
ans += cnt[a[a0]];
else if (vis[1][3])
ans += cnt[a[a1]];
else if (vis[2][3])
ans += cnt[a[a2]];
else
{
ans += n - a2 - cnt[a[a0]];
ans -= vis[0][1] ? 0 : cnt[a[a1]];
ans -= (vis[0][2] || vis[1][2]) ? 0 : cnt[a[a2]];
}
}
}
}
pld(ans);
return 0;
}