牛客——子序列(组合数学)

2023-11-02

子序列


题目描述

给定一个小写字母字符串 T T T
求有多少长度为 m m m的小写字母字符串 S S S满足, T T T S S S的一个子序列(不需要连续)

输入描述:

第一行一个字符串 T T T
第二行一个正整数 m m m

输出描述:

输出答案对 1 0 9 + 7 10^9+7 109+7取模的值

示例1

输入

a
2

输出

51

说明

长度为2的里面有 a a a的串有51种

备注:

1 < = ∣ T ∣ , m < = 1 0 5 1<=|T|,m<=10^5 1<=T,m<=105

解决思路

提示:以下的题解中, n n n为输入中的 m m m,即需要构造的字符串 S S S的长度, m m m为字符串 T T T的长度。

已知:求子串为 T T T且长度为 n n n的字符串的方案数。
求解:枚举 T T T的最后一个字母在 S S S中的所在位置,不难发现,位置的范围为: [ m , n ] [m,n] [m,n]
乘法原理考虑当前位置的前后方案数。
前:在前 i − 1 i-1 i1个位置中挑出 m − 1 m-1 m1个位置放 T T T的前 m − 1 m-1 m1个字符,在剩下的 i − m i-m im个位置中放除了 T T T的最后一个字符的字符(25种可能),贡献为 C ( i − 1 , m − 1 ) ∗ 2 5 i − m C(i-1,m-1)*25^{i-m} C(i1,m1)25im
后:由于字符串 S S S中已经存在了子串 T T T,所以这些位置可以任意选择 26 26 26个字母,贡献为 2 6 n − i 26^{n-i} 26ni
前后的贡献相乘并求和即可。
证明

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

typedef long long ll;
const int N = 1e5 + 10;
const int mod = 1e9 + 7;

ll fac[N];
ll ifac[N];

ll qpow(ll a, ll b, ll p) {
    ll res = 1;
    while (b) {
        if (b & 1) {
            res = res * a % p;
        }
        a = a * a % p;
        b >>= 1;
    }
    return res;
}
void init(const int n) {
    fac[0] = ifac[0] = 1;
    for (int i = 1; i <= n; i++) {
        fac[i] = fac[i - 1] * i % mod;
    }
    for (int i = 1; i <= n; i++) {
        ifac[i] = qpow(fac[i], mod - 2, mod);
    }
}
ll C(int n, int m) {
    if (n == 0 || m == 0 || n == m) return 1;
    ll up = fac[n];
    ll down = ifac[m] * ifac[n - m] % mod;
    return up * down % mod;
}

int main() {
    
    init(1e5);
    
    string s; cin >> s;
    int n; cin >> n;
    int m = s.size();
    
    ll ans = 0;
    for (int i = m; i <= n; i++) {
        ll t = C(i - 1, m - 1) * qpow(25, i - m, mod) % mod;
        t = t * qpow(26, n - i, mod) % mod;
        ans = (ans + t) % mod;
    }
    
    cout << ans << endl;
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛客——子序列(组合数学) 的相关文章

  • 华为云流水线CodeArts Pipeline怎么样?能实现哪些功能?

    华为云流水线服务CodeArts Pipeline 旨在提升编排体验 开放插件平台 并提供标准化的DevOps企业治理模型 将华为公司内的优秀研发实践赋能给伙伴和客户 灵活编排 高效调度 开放流水线插件 内置企业DevOps研发治理模型 体
  • 测试工程师进阶面试题目大合集

    很多软件测试工程师在面试的时候都会遇到考官给的各种各样的面试题 这也反应了测试工程师对企业的重要性 面试通常分为以下几个方面 由于篇幅有限 在这里就只给大家分享一些比较常见的问题 一 自我介绍 这里我不分享如何自我介绍 比我话术之类 相信大
  • STM32的485

    文章目录 RS232 COM接口 232通信 232电平 传输距离 RS485 485电平 RS485的两个电阻 RS485连接方式 SP3485芯片 485通信实验 实验介绍 Rs485 h Rs485 c 先初始化端口 串口和中断 F4
  • Discuz!应用中心安装插件显示数据下载错误(105/102)的解决方法

    Discuz 应用中心安装插件的时候最后提示数据下载错误 105 或数据下载错误 102 的问题 搜索了下看见很多站长反馈这个问题 出现类似的错误主要原因是服务器和应用中心连接出现问题 可以从以下3点去排查 1 云平台需要保证正常 所以先看
  • SAT (Separating Axis Theorem)

    Skip to content Home Download GitHub Maven Central About News Documentation Getting Started FAQ Samples Advanced Joints
  • jenkins中findbugs插件检测规则配置

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 近期项目中在jenkins自动构建基础上引入了findbugs进行代码检测 藉以发现项目中隐藏的一些问题 部署使用后发现一些bug是项目中不需要去修改的 众所周知在ecli
  • 注意力评分函数(掩蔽softmax操作,加性注意力,缩放点积注意力)

    将注意力汇聚的输出计算可以作为值的加权平均 选择不同的注意力评分函数会带来不同的注意力汇聚操作 当查询和键是不同长度的矢量时 可以使用可加性注意力评分函数 当它们的长度相同时 使用缩放的 点 积 注意力评分函数的计算效率更高 注意力汇聚 N
  • 蓝桥杯基础试题汇总

    目录 1 试题 基础练习 A B问题 2 数列问题 3 试题 基础练习 十六进制转八进制 4 试题 基础练习 十六进制转十进制 5 试题 基础练习 十进制转十六进制 6 试题 基础练习 序列求和 7 试题 基础练习 圆的面积 8 试题 基础
  • 北京工作单身,老家江西,90年水瓶男,无人驾驶公司从事研发工作

    对面走过来一个人 你撞上了那就是爱情 人生就是在走一条长长的路 我不知道它有没有终点 但我知道我会在路上遇到自己喜欢的人 我要在路上立个路牌啦 哦哦 开个玩笑 哈哈 博主 男生 水瓶座 90年 来自江西农村 本科学历 男 身高167cm 独
  • Ubuntu16.04配置Android开发环境

    1 下载安装jdk 用oracleJDK 据说openJDK很难用 下载地址 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html
  • [转]npm install 参数 的含义

    npm 5 0 0 之前 有 save 参数才会把模块写入到 packages json 现在已经是内置参数 不用额外写了 1 npm 常用的安装命令 npm i 就是npm install 简写 npm i xxx D 就是 npm i

随机推荐

  • 第十一章 关联容器(重点)

    11 关联容器 重点 关联容器中的元素是按关键字来保存和访问的 map 中的元素是一些关键字 值 key value 对 关键字起到索引的作用 值则表示与索引相关联的数据 set 中每个元素只包含一个关键字 set 支持高效的关键字查询操作
  • 运用威廉指标判断短线买卖点(图解)

    威廉指标 W R 又称为威廉超买超卖指数 它与随机摆动指标 KDJ 相似 也是一种分析市场短期内超买超卖情况的摆动类指标 威廉指标是一个波动性很强的短线指标 它可以帮助投资者在震荡行情中较为准确地进行高抛低吸操作 威廉指标的设计原理 威廉指
  • VS Code 配合 WSL 搭建 C/C++ 开发环境

    WSL 真香 最近在看 TCP IP网络编程 韩国人写的 讲解了 Windows 和 Linux 平台下的网络编程 才看了四章 感觉通俗易懂 值得一读 出版社网站上提供了源码 平时主要使用 Windows 为了看本书切换到 Linux 感觉
  • 盘点JAVA中比较常见的数据类型的 取值空间大小(让我们来干了这杯爪洼岛咖啡)

    JAVA作为一门面向对象的编程语言 吸收了C 等编程语言的优 点的同时 也展现了它独有的强大一面 列如可移植性可跨平台 性与及兼容性等特征 吸引了无数程序猿为其着迷 话不多说接下来今天我来带大家了解JAVA这门编程语言 中常用的数据类型的相
  • 深度学习------pytorch,CNN:实现mnist,cifar10数据集

    1 torch实现mnist数据集 1 1 cnn卷积 用全连接层写 实现mnist数据集分类 import torch from torch autograd import Variable import numpy as np from
  • How do Functional, Structural, and Behavioral Models Work Together to Describe a Whole System?

    原文链接 https brogramo com how do functional structural and behavioral models work together to describe a whole system As a
  • 机器学习、数据挖掘和统计模式识别学习(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 机器学习是让计算机在没有明确编程的情况下采取行动的科学 在过去的十年中 机器学习为我们提供了自动驾驶汽车 实用的语音识别 有效的网络搜索以及对人类基因组的理解大大提
  • postgresql-使用pg_dump导出表、pg_store导入表

    pg dump 是一个用于备份PostgreSQL数据库的实用工具 即使当前数据库正在使用 也能够生成一致性的备份 且不会阻塞其他用户访问数据库 包括读 写 pg restore 从一个归档中恢复一个由 pg dump 创建的 Postgr
  • 航空航天专业词汇(待补全)

    航空航天专业词汇 英文 中文 aborted rejected abandoned take off 中断起飞 above cloud 在云上 access flap 接口盖 acceleration 加速促进 actuating jack
  • html type=hidden 属性,input 属性及类型有哪些(type=text/button/hidden)

    input 从字面意就可以看出专门用来给用户输入文字的 当然也包括选择文件 它不具体表示某一类元素 如文本框 text 要使它具体表示一类元素必须加类型指明 如表示文本框加 type text type 也是 input 众多属性中最重要的
  • spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集

    前言 本章是spring基于XML 配置bean系类中第7篇讲解spring通过文件属性注入bean和基于xml的bean的自动装配以及spring eel表达式的使用加代码合集 个人主页 尘觉主页 个人简介 大家好 我是尘觉 希望我的文章
  • c语言 打空心菱形

    没错 如图所示 我们要整一个这样的菱形 写的挺麻烦的 代码如下 我是一半一半写的 要n 5 先写上半部分的代码 那么它是咋写出来的呢 本题可以完全用for语句写 但我选择了用for和if语句相结合的方式 i是代表的横 j代表的是列 所以它最
  • nginx相关漏洞处理:CVE-2016-2183、CVE-2022-41741、CVE-2022-41742

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 漏洞内容 二 现状 三 centos7安装openssl11 四 升级nginx到1 24 0 1 下载nginx 2 编译安装nginx 3 配置ngi
  • 2022数学建模美赛E题详细思路获取

    已更新 公众号 千千小屋grow 数据在文后链接 背景 正如我们所知 气候变化对生命构成了巨大的威胁 为了减轻气候变化的影响 我们需要采取严厉的行动 以减少大气中的温室气体的数量 仅仅是减少温室气体的排放是不够的 我们需要努力增加通过生物圈
  • log4j日志在java控制台输出,简单实用

    log4j日志在java控制台输出 简单实用 1 log4j输出有2中方式 第一种是将日志信息保存在一个文本当中 第二种是输出到控制台中 下面介绍第二种方式 2 在控制台输出log4j日志信息 是开发项目中常用的也是比不可少的也是必须会的一
  • 微信小程序中slider实现拾色器功能

    微信小程序中slider实现拾色器功能 思路 效果图 体验 代码 效果体验 思路 画板中要实现颜色选择功能 几经周折 效果还可以 整个思路就是 1 利用线性过渡实现slider背景渲染 2 获取slider滑块value值 3 计算该val
  • Markdown公式编辑学习笔记

    一 公式使用参考 1 如何插入公式 行中公式 放在文中与其它文字混编 可以用如下方法表示 数学公式 独立公式可以用如下方法表示 数学公式 自动编号的公式可以用如下方法表示 若需要手动编号 参见大括号和行标的使用 begin equation
  • 再看中国互联网web2.0百强名单

    无意中翻看到一篇我在三年多前写的文章 我看中国互联网web2 0百强名单 读来颇有感概 2005 2006那两年 正是WEB2 0概念轰轰烈烈的时候 大大小小的新网站层出不穷 博客 视频 交友 评点 社区 聚合 不管自己的网站的UGC比例多
  • bootstrap table 表格支持shirt 多选_bootstrap-table 表格行内编辑实现

    这篇文章向大家介绍一下如何使用bootstrap table插件实现表格的行内编辑功能 我的web前端学习交流群点击进入1045267283 欢迎加入 先放一张效果图 应用场景 之前的项目也是采用bootstrap table 添加和修改数
  • 牛客——子序列(组合数学)

    子序列 题目描述 给定一个小写字母字符串 T T T 求有多少长度为 m m m的小写字母字符串 S