2019.3.23 提高A组 T3 JZOJ 4673 LCS Again
程序员文章站
2022-04-01 19:22:35
...
现在有一个长度为的串,其中每一个字母都是前m个小写字母
计算有多少个不同的长度为的(其中也是由前个小写字母组成),并且S与T的LCS为
LCS就是同时存在于T$的最长子序列
荣斥瞎搞
#include<cstdio>
#include<cstring>
using namespace std;int n,m,k;
char s[100001];
long long ans;
signed main()
{
scanf("%d%d\n",&n,&m);
scanf("%s",s+1);
ans=n*(m-1);
for(register int i=2;i<=n;i++) if(s[i]!=s[i-1]) ans+=n*(m-1);
k=1;
for(register int i=2;i<=n;i++)
{
if(k==1) {if(s[i]!=s[i-1]) k++;else continue;}
else
{
if(s[i]==s[i-2]) k++;
else
{
ans-=k*(k-1)/2;k=1;
if(s[i]!=s[i-1]) k++;
}
}
}
ans-=k*(k-1)/2;
printf("%I64d",ans);
}