CF1778D Flexible String Revisit

news/2025/2/21 17:58:44

CF1778D Flexible String Revisit

题目大意

给出两个长度均为 n n n的01序列 S S S T T T,每次随机将 S S S中的某一位取反,求第一次 S = T S=T S=T时期望的操作次数。

有多组数据。


题解

因为是随机取反的,所以我们只需要知道 S S S T T T中相等的位的数量和不相等的位的数量。

f i f_i fi表示未匹配的位的数量为 i i i,翻转序列 S S S中不匹配的位置的期望操作次数。

考虑转移。每次有 i n \dfrac in ni的概率旋转一个不匹配的字符,有 n − i n \dfrac{n-i}{n} nni的概率翻转一个已匹配的字符。翻转已匹配的字符后需要 f i + 1 f_{i+1} fi+1的期望操作次数才能回到当前状态,然后还需要 f i f_i fi的期望操作次数才能再翻转一个未匹配字符,那么

f i = i n × 1 + n − i n × ( 1 + f i + 1 + f i ) f_i=\dfrac in\times 1+\dfrac{n-i}{n}\times (1+f_{i+1}+f_i) fi=ni×1+nni×(1+fi+1+fi)

化简得

f i = n + ( n − i ) f i + 1 i f_i=\dfrac{n+(n-i)f_{i+1}}{i} fi=in+(ni)fi+1

当然, f n = 1 f_n=1 fn=1,因为在这种情况下无论怎么翻转,都会翻转一个未匹配字符。

设当前有 k k k个字符未匹配,那么答案为 f k + f k − 1 + ⋯ + f 1 f_k+f_{k-1}+\cdots+f_{1} fk+fk1++f1

时间复杂度为 O ( ∑ n ) O(\sum n) O(n)。当然,如果提前处理 f f f数组,那么时间复杂度可以达到 O ( m x n + t ) O(mxn+t) O(mxn+t),mxn表示输入中最大的 n n n

code

#include<bits/stdc++.h>
using namespace std;
int t,n,v;
char a[1000005],b[1000005];
long long ans,f[1000005];
long long mod=998244353;
long long mi(long long t,long long v){
	if(!v) return 1;
	long long re=mi(t,v/2);
	re=re*re%mod;
	if(v&1) re=re*t%mod;
	return re;
}
int main()
{
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		scanf("%s%s",a,b);
		v=0;
		for(int i=0;i<=n;i++) f[i]=0;
		for(int i=0;i<n;i++){
			if(a[i]!=b[i]) ++v;
		}
		f[n]=1;
		for(int i=n-1;i>=1;i--){
			f[i]=(n+(n-i)*f[i+1])%mod*mi(i,mod-2)%mod;
		}
		ans=0;
		for(int i=v;i>=1;i--){
			ans=(ans+f[i])%mod;
		}
		printf("%lld\n",ans);
	}
	return 0;
}

http://www.niftyadmin.cn/n/160873.html

相关文章

【AI 工具】文心一言内测记录

文章目录一、申请内测二、收到内测邀请三、激活内测四、开始使用1、普通对话2、生成图片3、生成代码4、写剧本5、生成小说五、问题反馈一、申请内测 到 https://yiyan.baidu.com/welcome 页面 , 点击 " 开始体验 " 按钮 , 申请试用 ; 申请时 , 需要填写相关信息 ; 主…

在我的MacBook上捣鼓ESP8266

周三是我们的篮球日&#xff0c;打篮球后总是会有些兴奋&#xff0c;然后就容易睡不着&#xff0c;额&#xff0c;睡不着就拿我的ESP8266开发板出来捣鼓一下。先下载编译工具链https://github.com/espressif/ESP8266_RTOS_SDK下载sdkgit clone https://github.com/espressif/ES…

flume介绍及安装

一、什么是flume Flume是Cloudera提供的日志收集系统&#xff0c;Flume支持在日志系统中定制各类数据发送方&#xff0c;用于收集数据;同时&#xff0c;Flume提供对数据进行简单处理&#xff0c;并写到各种storage。Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传…

CSDN第37期编程竞赛活动经验

1、题目名称&#xff1a;幼稚班作业 幼稚园终于又有新的作业了。 老师安排同学用发给同学的4根木棒拼接成一个三角形。 当然按照正常的逻辑&#xff0c;如果不能拼 接成三角形。 必然要折断某个木棍来拼接三角形。 可是懒惰的小艺当然不会费力了&#xff01; 如果拼接不成三角形…

LA-Lib库c++环境下的编译和使用

下载地址一&#xff1a;GitHub仓库 下载地址二&#xff1a;&#xff08;内含己编译一个win64位的版本&#xff09;CSDN仓库 GitHub下载下的来包源码如下&#xff1a; 找到&#xff1a;make目录&#xff0c;ReadMe里面有各个版本的说明。 一&#xff1a;几种版本&#xff0c;具…

小白学Pytorch系列--Torch API (6)

小白学Pytorch系列-- Torch API (6) Reduction Ops argmax 返回输入张量中所有元素的最大值的索引。 >>> a torch.randn(4, 4) >>> a tensor([[ 1.3398, 0.2663, -0.2686, 0.2450],[-0.7401, -0.8805, -0.3402, -1.1936],[ 0.4907, -1.3948, -1.0691,…

英伟达 NVIDIA 和Chrome 谷歌浏览器GPU高性能配置

NVIDIA and Chrome browser for 3D settings NVIDIA Settings as below steps: 1. Open NVIDIA Control panel 2 Settings for Manage 3D panel 3 Switch to tab “Program Settings” 4、Finally , Settings for PhysX make sure that GeForce is selected as below screen…

iOS上架App Store详解(图文)

上架基本需求资料 1、苹果开发者账号&#xff08;如还没账号先申请- 苹果开发者账号申请教程&#xff09; 2、开发好的APP 通过本篇教程&#xff0c;可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestFlight测试然后提交审核的完整流程&#xff01; …