効果の件名:
今ストリングSの各文字が前に小文字のmとnは、長有する
異なる長さN(T mが、第一小文字で書かれている)Tの数を計算し、SおよびT N-1 LCSは
、最長シーケンスはLCSとS Tの両方に存在します
問題解決のアイデア:
隣接するブロック、回答寄与の各ブロックと同じ文字
私たちは、文字列があるときことがわかりました。
その後、我々は次の場合に分離することを推測することができ、その答えが繰り返され、それはまた、等間隔の文字で繰り返されます
の繰り返し
二次
そして、あなたは答えを得ることができます
#include<cstdio>
#define ll long long
using namespace std;
const ll N = 100005;
ll n, m, ans, k;
char s[N];
int main() {
scanf("%lld %lld", &n, &m);
scanf("%s", s+1);
ans = 1;
for (ll i = 2; i <= n; ++i)
ans += (s[i] != s[i-1]);
ans *= n * m - n; k = 1;
for (ll i = 2;i <= n; ++i)
if (k == 1) k += (s[i] != s[i-1]);
else if(s[i] == s[i-2]) ++k;
else {
ans -= k * (k-1) / 2;
k = (s[i] != s[i-1]) + 1;
}
ans -= k * (k-1) / 2;
printf("%lld", ans);
}