[数学]JZOJ 4673 LCS again

Description

现在有一个长度为n的串S,其中每一个字母都是前m个小写字母
计算有多少个不同的长度为n的T(其中T也是由前m个小写字母组成),并且S与T的LCS为n-1
LCS就是同时存在于S和T的最长子序列

Input

第一行包含两个整数n和m表示S的长度和前m个小写字母
第二行是串S

Output

只要输出存在的T的数量

Sample Input

输入1:3 3aaa

输入2:3 3aab

输入3:1 2a

输入4:10 9abacadefgh

Sample Output

输出1:6

输出2:11

输出3:1

输出3:789

样例解释第一个样例有6个可能的串T:aab,aac,aba,aca,baa,caa第二个样例有11个可能的串TAaa,aac,aba,abb,abc,aca,acb,baa,bab,caa,cab第三个样例只有b

Data Constraint

对于20%,n<=100
对于30%,n<=1000
对于40%,n<=10000
对于100%,n<=100000

分析

首先我们能看出来串T其实只能是删除一个字母以后再插入新字母的串S

那么我们S中任意一个位删掉换成不是原字母的任意字母的方案数为n*(m-1)

然后我们考虑一下,如果我们把连续的一段分块,那我们会发现,连续一段里面的所有字母拉出来以后再放进去是同一个效果的(重复方案)

那么我们对于一个块只用考虑一个字母的贡献

然后我们给一个串如:

aaacb

那我们把a移到c前面变换一下试试:aaacb,aabcb,aaccb

移到b前面看看:aacab,aacbb,aaccb

我们发现aaccb是重复的

所以一个字母在前后只能用一次,每个块的贡献是n*(m-1)

然而你会发现这样做还是有问题,如:

ababab

我们会发现相隔的两个字母(块)将会有重复计算的方案,所以还要再减去n*(m-1)(每对相隔的块减一次)

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int n,m,cnt;
char c[N];
ll ans;

int main() {
    scanf("%d%d",&n,&m);
    scanf("%s",c+1);
    ans=1ll*n*(m-1);
    for (int i=2;i<=n;i++) if (c[i]!=c[i-1]) ans+=1ll*n*(m-1);
    cnt=1;
    for (int i=2;i<=n;i++) {
        if (cnt==1&&c[i]!=c[i-1]) cnt++;
        else {
            if (cnt==1) continue;
            if (c[i]==c[i-2]) cnt++;
            else {
                ans-=1ll*(cnt*(cnt-1)>>1ll);cnt=1;
                if (c[i]!=c[i-1]) cnt++;
            }
        }
    }
    ans-=(cnt*(cnt-1)>>1ll);
    printf("%lld",ans);
}

原文地址:https://www.cnblogs.com/mastervan/p/10645434.html

时间: 2025-01-19 15:20:25

[数学]JZOJ 4673 LCS again的相关文章

[高精度][数学] Jzoj P3771 小Z的烦恼

Description 小 Z 最近遇上了大麻烦,他的数学分析挂科了.于是他只好找数分老师求情. 善良的数分老师答应不挂他,但是要求小 Z 帮助他一起解决一个难题问题是这样的,现在有 n 个标号为 1-n 的球和 m 个盒子,每个球都可以放进且只能放进一个盒子里面,但是要满足如下的规则: 1.  若把标号为 i 的球放进了第 j 个盒子,那么标号为 2*i 的球一定要在第 j+1 个盒子里面(若 j<m) 2.  若把标号为 i 的球放进了第 j 个盒子,并且 k*2=i,那么标号为 k 的球一

[计数dp][数学] Jzoj P4254 集体照

Description 一年一度的高考结束了,我校要拍集体照.本届毕业生共分n个班,每个班的人数为Ai.这次拍集体照的要求非常奇怪:所有学生站一排,且相邻两个学生不能同班.现在,安排这次集体照的老师找到了你,想问问你一共有多少种方案.方案数可能很大,最终结果对1,000,000,007取模. Input 输入文件名为photo.in.第一行为为一个整数n.第二行为n个正整数,分别为每个班的人数. Output 输出文件photo.out,共1行,为总方案数. Sample Input 输入1:

[DP][数学]JZOJ 3318 Brunhilda的生日

Description 除去对铁质盔甲强烈的热爱,Brunhilda是一个正常的7岁女孩.近期,她正在策划一个完美的生日派对.她发明了如下的一个游戏:所有的孩子在一个数k被宣读之前不停地跑来跑去.当这个数字k宣读后,所有的孩子将形成人数恰好为k的若干群体,且保证剩余的孩子数目小于k.最后,这不足k个的孩子将从游戏中被淘汰.紧接着,比赛将继续进行,并公布一个新的数字k.游戏将在所有的孩子都被淘汰后结束. Brunhilda请她的父亲Wotan在游戏中来宣读数字.Wotan不喜欢这个游戏,当然也不希

[数学][dp] Jzoj P4236 登山

Description 恶梦是一个登山爱好者,今天他来到了黄山.俗话说的好,不走回头路.所以在黄山,你只能往前走,或者往上走.并且很显然的是,当你走到山脊的时候,你不能够往上走,你只能往前走一步再往上走.抽象一点而言就是,你可以把黄山视为一个N * N格点图,恶梦从(0,0)开始出发,要走到(N,N).当他走到位置(x,y)的时候,它可以往(x + 1,y),或(x,y+1)走.并且当他走到(x,x)的时候,由于他已经处在了山脊上,所以他不能够往(x,x+1)方向上走.当恶梦兴致勃勃准备开始爬山

[jzoj]3456.【NOIP2013模拟联考3】恭介的法则(rule)

Link https://jzoj.net/senior/#main/show/3456 Description 终于,在众亲们的奋斗下,最终boss 恭介被关进了库特设计的密室.正当她们松了一口气时,这个世界却发生了天翻覆地的变化:地面开始下沉,天空开始变成血红色,海水沸腾……一幅世界末日的图景.美鱼从她手中的古籍<若山牧水诗歌集>中发现了原因:白鸟は かなしからずや 空の青 海のあをにも 染まずただよふ .大(xia)意(shuo)就是狡猾的恭介在创造这个世界的时候就篡改了法则.而这个法则

【网址】数学网址大全

中文数学专业网站:博士家园http://www.math.org.cnhttp://www.bossh.net 数理逻辑.数学基础:http://www.disi.unige.it/aila/eindex.html意大利逻辑及其应用协会的主页,包括意大利数理逻辑领域的相关内容. http://www.plenum.com/title.cgi?2110<代数与逻辑>,<西伯利亚代数与逻辑期刊>的翻译版,荷兰的Kluwer学术出版社提供其在线服务. http://forum.swart

数学系列:数学资源

中文数学专业网站:博士家园 http://www.math.org.cn http://www.bossh.net   数理逻辑.数学基础:http://www.disi.unige.it/aila/eindex.html 意大利逻辑及其应用协会的主页,包括意大利数理逻辑领域的相关内容.   http://www.plenum.com/title.cgi?2110 <代数与逻辑>,<西伯利亚代数与逻辑期刊>的翻译版,荷兰的Kluwer学术出版社提供其在线服务.   http://f

JZOJ 1981. 【2011集训队出题】Digit

JZOJ 1981. [2011集训队出题]Digit Time Limits: 1000 ms Memory Limits: 128000 KB Description 在数学课上,小T又被老师发现上课睡觉了.为了向全班同学证明小T刚才没有好好听课,数学老师决定出一道题目刁难一下小T,如果小T答不出,那么-- 情节就按照俗套的路线发展下去了,小T显然无法解决这么复杂的问题,可怜的小T只能向你求助: 题目是这样的: 求一个满足条件的n位数A(不能有前导0),满足它的数字和为s1,并且,A*d的数

LCS(详解)

一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB 则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA 二,算法求解 这是一个动态规划的题目.对于可用动态规划求解的问题,一般有两个特征:①最优子结构:②重叠子问题 ①最优子结构 设 X=(x1,x2,.....xn) 和 Y={y1,y2,.....ym} 是两个序列,将 X 和 Y 的最长公共子序列记为LCS(X,