AtCoder Beginner Contest 171 F Strivore 排列组合+难在去重+快速幂+阶乘逆元+组合数

麒麟系统下的多媒体革命:VLC在kylinV10上的性能优化与调试技巧 本文详细介绍了在麒麟kylinV10系统上优化VLC多媒体播放性能的实战技巧,特别针对飞腾FT-2000/4硬件平台。从源码编译调优到硬件加速配置,提供全面的性能提升方案,帮助开发者在国产操作系统上构建高效媒体播放环境。 阅读详情

AtCoder Beginner Contest 171   比赛人数10532  比赛开始后14分钟看到A题,之后,每过一分钟看到一道题

AtCoder Beginner Contest 171  F   Strivore   排列组合+难在去重+快速幂+阶乘逆元+组合数

总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/104454762

在线测评地址https://atcoder.jp/contests/abc171/tasks/abc171_f

题目大意:给定字符串s,数字k,可以往字符串s里插入k个小写字母,插入位置不限,问生成新的字符串的数量。

涉及排列组合,怎么选取这一下,比较考验人。

为了验证下面算法正确,还专门针对相应的数据,编写了检验代码,感兴趣的读者,可以阅读AC代码之后的内容。

如下数据模拟如下

2
ab

3851

以下生成过程(aabb,aaab,abbb等不会重复生成)


原始字符长度是2,还需插入2个字符,最后字符串总长度是2+2=2
1.原始字符a占据新字符串串首的位置
a( )( )( )
剩下4个空位,原始字符的后1个字符还需占据1个位置,对应的选择数目是C(3,1)=3
a(b)( )( )
a( )(b)( )
a( )( )(b)
1.1以如下形式为例
a(b)( )( )
剩下的两个空位,可以插入字符,插入的字符都不能与前一个字符雷同,每个位置都有25种形式
a(b)(不能是字母b)(不能是字母b)
对应的组合数量25*25

1.2以如下形式为例
a( )(b)( )
剩下的两个空位,可以插入字符,插入的字符都不能与前一个字符雷同,每个位置都有25种形式
a(不能是字母a)(b)(不能是字母b)
对应的组合数量25*25

1.3以如下形式为例(注:abbb只在此时生成)
a( )( )(b)
剩下的两个空位,可以插入字符,插入的字符都不能与前一个字符雷同,每个位置都有25种形式
a(不能是字母a)(不能是字母a)(b)
对应的组合数量25*25

总的组合数量25*25*3=25^2*C(3,1)=26^0*25^2*C(3,1)

2.原始字符a占据新字符串第二个位置
( )a( )( )
新字符串第二个位置之后只剩下2个空位,原始字符的后2个字符还需占据1个位置,对应的选择数目是C(2,1)=2
( )a(b)( )
( )a( )(b)
2.1以如下形式为例
( )a(b)( )
剩下的a前的1个空位,可以插入字符,插入的字符可以是任意字符,每个位置都有26种形式,
剩下的b后的1个空位,可以插入字符,插入的字符可以是不能与b雷同,每个位置都有25种形式,
(任意字符)a(b)(不能是字母b)
对应的组合数量26*25

2.2以如下形式为例(注:aabb只在此时生成)
( )a( )(b)
剩下的a前的1个空位,可以插入字符,插入的字符可以是任意字符,每个位置都有26种形式,
剩下的a后的1个空位,可以插入字符,插入的字符可以是不能与a雷同,每个位置都有25种形式,
(任意字符)a(不能是字母a)(b)
对应的组合数量26*25

总的组合数量26*25*2=26*25*C(2,1)=26^1*25^1*C(2,1)

3.原始字符a占据新字符串第三个位置
( )( )a( )
新字符串第三个位置之后只剩下1个空位,原始字符的后1个字符还需占据1个位置,对应的选择数目是C(1,1)=1
( )( )a(b)
3.1以如下形式为例(注:aaab只在此时生成)
( )( )a(b)
剩下的a前的2个空位,可以插入字符,插入的字符可以是任意字符,每个位置都有26种形式,
(任意字符)(任意字符)a(b)
对应的组合数量26*26=26^2*C(1,1)=26^2*25^0*C(1,1)

结合上述所有情况,对应的组合数量是26^0*25^2*C(3,1)+26^1*25^1*C(2,1)+26^2*25^0*C(1,1)=3851

根据上述模拟过程,对应的算法如下:

原字符串长度是m,需插入n个字符,在新的字串空间n+m中,

1.先放入第一个原始字符,该原始字符前有i(0<=i<=n)个空位,每个空位均有26种摆法,对应,26^i.

2.此时,总长度是n+m,已占据了i+1个字符,剩下n+m-(i+1)个空位,在剩下的空位中选择m-1个位置给原始字符串中剩下的m-1个字母使用,有C(n+m-i-1,m-1)种选择方式。

3.此时还剩下n+m-(i+1)-(m-1)=n-i个空位,在这剩下每个空位对应着25种选法(26个字母,扣除自左向右,最靠近该位的原字串字母,故剩下25个可选字母)。

综上所述,对应公式如下:

AC代码如下

#include <stdio.h>
#include <string.h>
#define mod 1000000007
#define LL long long
#define maxn 1000010
char s[maxn];
LL fact[maxn<<1],inv[maxn<<1];
int m,n;
LL quick_pow(LL a,LL b){//快速幂
	LL ret=1;
	while(b){
		if(b&1)ret=ret*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return ret%mod;
}
void init(){
	int i;
	fact[0]=1;
	for(i=1;i<=n+m;i++)fact[i]=fact[i-1]*i%mod;//阶乘
	inv[n+m]=quick_pow(fact[n+m],mod-2);
	for(i=n+m-1;i>=0;i--)inv[i]=inv[i+1]*(i+1)%mod;//阶乘的乘法逆元
}
LL C(int n,int m){//组合数计算
	return fact[n]*inv[n-m]%mod*inv[m]%mod;
}
int main(){
	int i;
	LL ans=0;
	scanf("%d%s",&n,s);
	m=strlen(s);
	init();
	for(i=0;i<=n;i++)
		ans=(ans+quick_pow(26,i)*C(n+m-i-1,m-1)%mod*quick_pow(25,n-i)%mod)%mod;
	printf("%lld\n",ans);
	return 0;
}

 

为了验证下面算法正确,还专门针对相应的数据,编写了检验代码

验证代码只针对如下数据。

2
ab

3851

验证代码如下,该验证代码编译运行后,输出3851

#include <cstdio>
#include <set>
using namespace std;
set<int> st;
int main(){
	char a,b,c,d;
	int A,B,C,D,ans;
	for(a='a';a<='z';a++)
		for(b='a';b<='z';b++)
			for(c='a';c<='z';c++)
				for(d='a';d<='z';d++){
					A=a-'a',B=b-'a',C=c-'a',D=d-'a';
					ans=A+B*100+C*10000+D*1000000;
					if(b=='b'&&a=='a')st.insert(ans);
					else if(c=='b'&&(a=='a'||b=='a'))st.insert(ans);
					else if(d=='b'&&(a=='a'||b=='a'||c=='a'))st.insert(ans);
				}
	printf("%d\n",st.size());
	return 0;
}

 

visio安装包 Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。 立即下载

相关推荐

单细胞转录组上游分析完整流程(超详细)

本指南详细介绍单细胞转录组数据分析流程,从10xGenomics平台数据出发,使用CellRanger工具完成从原始FASTQ文件到基因表达矩阵的全过程。内容涵盖:1) 环境准备与参考基因组获取;2) 测试数据下载;3) 数据质量检测方法;4) CellRanger核心流程详解;5) 结果解读;6) 下游分析衔接。同时提供开源替代方案kallisto|bustools的使用说明,并解答常见问题。适合单细胞转录组分析初学者快速掌握标准分析流程。

Rita_rr的博客 1156

AtCoder Beginner Contest 171

A 签到 #include<bits/stdc++.h> using namespace std; int main(){ char c; cin>>c; if(c>='A'&&c<='Z') cout<<"A"; else cout<<"a"<<endl; } B 签到 #include<bits/stdc++.h> using namespace std; int a[1111

PengWei Yang 245

Ardupilot姿态控制详解(完结篇)

本文主要是对过去写的一些APM中姿态控制流程及函数博文的汇总。 按照之前写的博文以及个人认为的学习顺序,给出APM姿态控制器的学习顺序如下: APM姿态旋转理论基础 Ardupilot姿态控制器 PID控制流程(整定后的P控制器) 详解APM的开方控制器sqrt_controller Ardupilot前馈及平滑函数input_euler_angle_roll_pitch_yaw解析 Ardupilot倾转分离函数thrust_heading_rotation_angles Ardupilot四元数姿态控制

moumde的博客 7024

AtCoder Beginner Contest 171(补题)

C - One Quadrillion and One Dalmatians 题意: 现在1到261到261到26的数字为a到za到za到z,272727到702702702数字为 aa, ab, ac, …, zy, zz,475255,475256为aaaaa, aaaab,现在给你数字nnn,让你输出对应的字符串 思路: 26个字母,所以转换为26进制,每次取余前,要减去1,把[1,26][1,26][1,26]映射到[0,25][0,25][0,25],然后输出即可 #include <b

weixin_54699118的博客 295

别再只盯着充电功率了!从PWM信号到PLC通信,一文读懂CCS2充电桩如何跟你家电动车“聊天”

本文深入解析了CCS2充电桩与电动汽车之间的12次关键通信交互,从硬件握手到PLC加密通信,再到充电参数动态协商与安全校验。通过详细的技术细节和实时交互逻辑,揭示了现代快充技术如何实现高效安全的能量传输,帮助用户理解充电过程中的核心技术要点与故障排查方法。

weixin_30527323的博客 141

麒麟v10系统安装

麒麟v10系统安装

喜文BLOG 1万+

AtCoder Beginner Contest 171 A~D题解

ABC 171 A~D 题解 A - αlphabet B - Mix Juice C - One Quadrillion and One Dalmatians D - Replacing

天生我材必有用,千金散尽还复来。 8509

NVIDIA Isaac Sim 入门教程 - 运动生成控制器(Motion Generators)

机器人任务通常在任务空间中根据所需的末端执行器轨迹进行定义,而控制动作则在关节空间中执行。这自然会产生关节空间和任务空间(操作空间)控制方法。然而,要利用运动控制成功执行交互任务,往往需要对机械臂及其环境都建立精确的模型。虽然可以知道足够精确的机械臂模型,但很难获得详细的环境描述 [SSVO09]。可以通过在交互过程中引入顺应行为来克服这种不匹配造成的规划错误。虽然顺应性可以通过机器人的结构(如弹性致动器、软机械臂)被动实现,但我们对侧重于主动交互控制的控制器设计更感兴趣。这些设计大致分为注释。

2506_90492529的博客 1578

Atcoder Beginner Contest 171 F

题意: 给定一个字符串SSS,问插入kkk个字符后可以形成多少个不同的字符串,答案对109+710^9+7109+7取模。 题解: 设字符串SSS长度为lenlenlen,当插入了kkk个字符后长度变为len+klen+klen+k,故我们可以枚举字符串SSS的lenlenlen个字符位置。 枚举iii为字符串SSS中S[len−1]S[len-1]S[len−1]这个字符(最后一个字符)的位置,那么之后的k−ik-ik−i个字符每个都有262626个选择,即26k−i26^{k-i}26k−i种。 那么

solego’s blog 569

基于CANopen协议,实现机器人500-1000Hz高频控制(附实操实例) (1)

基于CANopen协议实现机器人500-1000Hz高频控制,核心不是“协议本身的性能极限”,而是“通过优化配置、硬件适配、软件调优,最大化发挥协议的实时性优势”。关键在于:以PDO为核心实现实时数据传输,以SYNC帧锁定高频同步周期,以精简冗余、优化硬件降低总线负载,同时通过实操调试解决周期漂移、延迟、干扰等问题。

start_up_go的博客 93

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

SDANet整体架构和模块Dynamic Channel Sparse Attention (DCSA):DCSA为Transformer块中的自注意力层。DCSA架构:样本级动态稀疏注意力:首次实现每个样本独立预测注意力稀疏度:通过轻量门控网络根据输入特征的复杂度自适应调整保留的通道数,简单样本使用更高稀疏度(如保留 20% 通道),复杂样本使用更低稀疏度(如保留 80% 通道),在保证精度的前提下平均计算量降低 50% 以上。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 108

AtCoder Beginner Contest 171 E - Red Scarf (位运算+思维)

链接 E - Red Scarf 题意 : 给一个长度为 偶数的序列,序列中的每个元素是原序列中 除去当前位置元素的异或和,求原序列。 思路: 根据异或的性质,一个数异或奇数次为本身,异或偶数次为0. 2.假设原序列为 a,给出的序列为 b,要求 a1的话,只要把 b序列中 b2-bn 全部异或起来,那么就刚好 a1 异或了 n-1次(奇数次),其他为异或了 n-2次(偶数次),那么这个值就是我们要求的 a1了。代码用一个前缀,后缀就好了。 代码 #include<iostream> #

hddddh的博客 422

超声相控阵合成孔径成像FPGA设计介绍

1.仿真预览 2.理论分析 系统的基本结构如下所示: 以上是实际中完整的结构,系统中会涉及到两块板子中的时钟,这个就是设计一个时钟采样同步的问题,即所谓的时钟同步。一般这种情况,往往使用内插的方式来解决。这是由于,在实际中,超生波接收到的信号是由本身系统发送出去反射回来得到的,因此从另外一方面将,其是同步的。但是在接收的时候通过内插的方法解决其中的延迟问题。 根据论文中的介绍,整个系统分为如下几个部分: ·模拟发送信号,这个部分由MATLAB产生测试数据并量...

FPGA/MATLAB学习教程/源码/项目合作开发 2069

Atcoder Beginner Contest 171 C

题意: 给定一个十进制数nnn,输出它的262626进制数,用262626个小写字母表示 题解: 本来以为直接除即可,但是写几个例子发现由于是取模,所以000对应aaa,252525对应zzz 所以每次取模前都要减去1保证其合法。 如262626转换成zzz,那么我们取模的时候最大得到的是252525,所以262626要事先减去111 如272727转换成aaaaaa,第一次得到aaa是(27−1)%26=0(27-1)\%26=0(27−1)%26=0,然后(27−1)/26=1(27-1)/26=1(2

solego’s blog 246

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

AtCoder Beginner Contest 171 总结

比上次多做了一道,但排名退了600,确实题比较水...... ABCDE几乎都算水题,C是一个类似秦九韶算法的东西,在26进制下搞一下即可,第一波搞忘减去余数还WA了......D利用“同一个数跟自己异或偶数次为0”的性质也很容易整出来,说一下F这道计数题。 题意很简单,问在一个给定的长为m的原字符串的基础上插入(可以插在串头和串尾)n个新字符能得到多少种新串,要做到不重复计数有一定难度。 最直接的思路就是n+m个位置上选m个位置放入原字符串的字符然后剩下的随便填,但很容易发现这么算会算重,比如aab

KGV093的博客 600

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

AtCoder Beginner Contest 171 B Mix Juice 自小到大选出k个数

AtCoder Beginner Contest 171 比赛人数10532 比赛开始后14分钟看到A题,之后,每过一分钟看到一道题 AtCoder Beginner Contest 171 B Mix Juice 自小到大选出k个数 总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/104454762 在线测评地址https://atcoder.jp/contests/abc171/tasks/abc171_b 题目大意:给出...

mrcrack的博客 489

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

AtCoder Beginner Contest 171 F.Strivore

AtCoder Beginner Contest 171 F.Strivore 题目链接 简单的组合数学~ 我们首先可以确实最终的字符串有几个字符,那么我们每次可以挑 iii 个位置,答案即为 CsumiC_{sum}^iCsumi​,那对这 iii 个位置,每个位置都有 252525 个选择,答案即为 25i25^i25i,两个相乘即可,AC代码如下: #include<bits/stdc++.h> using namespace std; typedef long long ll; con

旺崽的博客 3085

AtCoder Beginner Contest 171 D Replacing 桶排序+及时更新数据

AtCoder Beginner Contest 171 比赛人数10532 比赛开始后14分钟看到A题,之后,每过一分钟看到一道题 AtCoder Beginner Contest 171 D Replacing 桶排序+及时更新数据 总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/104454762 在线测评地址https://atcoder.jp/contests/abc171/tasks/abc171_d 题目大意:...

mrcrack的博客 470

AtCoder Beginner Contest 171 AK!

这一场好神奇!能AK了 AB水题, C - One Quadrillion and One Dalmatians 把一个数字转化为字母,规则为 \([1,26]\) 对应 \([a,z]\) , 27 对应 aa ..... 循环至 N = 0即可,转26进制 int main() { cin.tie(nullptr)->sync_with_stdio(false); l...

橘嘉禾 110

AtCoder Beginner Contest 171 E Red Scarf 异或特性+公式推导

AtCoder Beginner Contest 171 比赛人数10532 比赛开始后14分钟看到A题,之后,每过一分钟看到一道题 AtCoder Beginner Contest 171 E Red Scarf 异或特性+公式推导 总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/104454762 在线测评地址https://atcoder.jp/contests/abc171/tasks/abc171_e 题目大意:给...

mrcrack的博客 488

AtCoder Beginner Contest 171 A - αlphabet

A - αlphabet Time Limit: 2 sec / Memory Limit: 1024 MB Score :100points Problem Statement An uppercase or lowercase English letterααwill be given as input. Ifααis uppercase, printA; if it i...

小谢的博客 545

AtCoder Beginner Contest 171 E.Red Scarf

AtCoder Beginner Contest 171 E.Red Scarf 题目链接 位运算水题~ 题目很容易发现每个位置的答案就是其他数抑或和,所以我们可以预处理算出所有数的抑或和 sumsumsum,因为 x⊕x=0x⊕x=0x⊕x=0,所以对 a[i]a[i]a[i],只要输出 sum⊕a[i]sum⊕a[i]sum⊕a[i] 即可,AC代码如下: #include<bits/stdc++.h> using namespace std; typedef long long ll;

旺崽的博客 2648

AtCoder Beginner Contest 171 B - Mix Juice

B - Mix Juice Time Limit: 2 sec / Memory Limit: 1024 MB Score :200200points Problem Statement A shop sellsNNkinds of fruits, Fruit1,…,N1,…,N, at prices ofp1,…,pNp1,…,pNyen per item, respect...

小谢的博客 637

AtCoder Regular Contest 171(A~B)

AtCoder Regular Contest 171(A~B)

qq_17807067的博客 727

【题解】「abc171F」Strivore

题意 求出在一个字符串 sss 中插入 nnn 个小写字母,有多少不同的结果。n≤106n\leq 10^6n≤106 。 神仙计数题。本题可以等价转化为,有多少长度为 n+mn+mn+m 的字符串存在子序列串 sss 。为了避免算重,我们规定如果有相同字符,则取序列中的最后一个 。 例如:字符串 abbcddc 的子序列 bc,从字符串的结尾往开头找,c 找到字符串末尾,b 找到字符串第三位。不难发现,对于一个给定的字符串所对应的唯一子序列是确定的。 那么我么就可以考虑枚举开头位置 1≤i≤m+11\le

cqbzlydd的博客 441

AtCoder 2000 [AGC002F] Leftmost Ball(dp+组合数)

。。。

425
上一篇: [codeforces 1369D] TediousLee 树上找规律
下一篇: [codeforces 1373C] Pluses and Minuses 找规律,难在+号会使数据发生跳跃,跳过了中间的+号
mrcrack
博客等级 码龄15年 1072粉丝 1063原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值