1778D Flexible String Revisit
1778D Flexible String Revisit
题目大意:
给你两个长度均为\(n\)二进制数列:\(S,T\) 每次可以把\(S\)中的一位取反,问你\(S \to T\)的期望方案数。
做法:
dp
我们考虑\(dp_i\)表示\(i\)个不一样的位置\(\to i - 1\)个不一样的位置的期望方案数
每次有\(\dfrac{i}{n}\)的概率翻转一个未匹配字符,\(\dfrac{n - i}{n}\)的概率翻转一个已匹配字符。翻转到已匹配字符需要 \(f_{i + 1}\)期望次数才能回到当前状态,然后又需要\(f_i\)期望次数才能翻转一个未匹配字符。于是有方程:
\(f_i = 1 + \dfrac{n - i}{n} * (f_{i + 1} + f_i)\)
化简一下:
\(f_i = \dfrac{n + (n - i) * f_{i + 1}}{i}\)
注意
当所有字符未匹配时随意翻一个都是未匹配字符,所以\(f_n = 1\)
设初始状态有\(k\)个字符需要匹配,那么\(ans = \sum_{i = 1}^{x}\)
code
#include<bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
const int N = 1e6 + 5;
int n;
char s[N] , t[N];
long long fac[N + 5] , inv[N + 5] , ans , f[N] , p;
long long ksm (long long x , long long y) {
if(!y)
return 1;
long long z = ksm (x , y / 2);
z = z * z % mod;
if (y & 1)
z = z * x % mod;
return z;
}
void pre () {
fac[0] = 1;
for (int i = 1 ; i <= N ; i ++) {
fac[i] = fac[i - 1] * i % mod;
}
inv[N] = ksm(fac[N] , mod - 2);
for (int i = N - 1 ; i >= 0 ; i --) {
inv[i] = inv[i + 1] * (i + 1) % mod;
}
}
int main () {
int T , dif;
pre ();
scanf ("%d" , &T);
while(T --) {
scanf ("%d" , &n);
scanf("%s%s",s+1,t+1);
dif = 0;
for (int i = 1 ; i <= n ; i++) {
if (s[i] != t[i]) {
dif ++;
}
}
inv[n] = ksm(n , mod - 2);
f[n] = 1;
for (int i = n - 1 ; i >= 1 ; i--) {
f[i] = (n + (n - i) * f[i + 1] % mod) * ksm (i , mod - 2) % mod;
}
ans = 0;
for (int i = 1 ; i <= dif ; i++) {
ans = (ans + f[i]) % mod;
}
printf("%lld\n" , ans);
}
return 0;
}
1778D Flexible String Revisit的更多相关文章
- python3.3 unicode(encode&decode)
最近在用python写多语言的一个插件时,涉及到python3.x中的unicode和编码操作,本文就是针对编码问题研究的汇总,目前已开源至github.以下内容来自项目中的README. 1 ASC ...
- Basic Tutorials of Redis(2) - String
This post is mainly about how to use the commands to handle the Strings of Redis.And I will show you ...
- 移动端自适应:flexible.js可伸缩布局使用
http://caibaojian.com/flexible-js.html 阿里团队开源的一个库.flexible.js,主要是实现在各种不同的移动端界面实现一稿搞定所有的设备兼容自适应问题. 实现 ...
- 移动端适配--flexible.js
引言: H5适配一直是一个比较普遍的问题,很多文章都会讲,最近开发了一个H5的项目使用了一下淘宝的 flexible.js,写一篇文章自己总结一下. 一.背景介绍: Flexible.js是淘宝公开的 ...
- C99标准的柔性数组 (Flexible Array)
[什么是柔性数组(Fliexible Array)] 柔性数组在C99中的定义是: 6.7.2.1 Structure and union specifiers As a special case, ...
- 移动端适配方案 flexible.js
前言 移动端适配一直以来都是前端开发中不可或缺的重要组成部分,如果没有了它,那么你做出来的页面极有可能会出现各种意外(写出来的页面与设计稿之间的差别).所有我们得找到一种相对来说让人比较满意的解决方案 ...
- Apache Kudu as a More Flexible And Reliable Kafka-style Queue
Howdy friends! In this blog post, I show how Kudu, a new random-access datastore, can be made to fun ...
- 手淘移动适配方案flexible.js兼容bug处理
什么是flexible.js 移动端自适应方案 https://www.jianshu.com/p/04efb4a1d2f8 什么是rem 这个单位代表根元素的 font-size 大小(例如 元素的 ...
- reset.css 和 flexible.js
重置css默认样式(淘宝): body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, f ...
- 手淘H5移动端适配方案flexible源码分析
移动端适配一直是一个值得探讨的问题,在业余时间我找了一些页面,查看了一些厂商对于移动端H5页面的适配方案,看到了几个典型的例子,今天就来记录一下我看到的第一个典型的例子,也是我们公司目前普通H5项目正 ...
随机推荐
- idea的Tomcat的配置
1.创建一个web项目 2.创建项目完成后,配置 点击add 3.点击扳手 选择tomcat Server ----->Local 4.选择tomcat的文件夹路径 点击ok 5.再次点 ...
- error check
#define SYSTEM_PRTCT_NOERR 0 #define SYSTEM_PRTCT_COVER (1 << 0) /* */#define SYSTEM_PRTCT_LPH ...
- Sqoop从MySQL向Hive增量式导入数据报错:Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject
1.问题描述: (1)问题示例: Step1:创建作业: [Hadoop@master TestDir]$ sqoop job \> --create myjob_1 \> -- impo ...
- Windows快捷键学习
Ctrl组合 Ctrl+C 复制 Ctrl+X 剪切 Ctrl+V 粘贴 Ctrl+A 全选 Ctrl+Z 撤消 Ctrl+S 保存 Shift组合 Shift+Delete 永久删除 Shift+A ...
- Spring全家桶
常用框架的知识点汇总,如图: 一.5个常用的spring框架 ▌1.spring framework 也就是我们经常说的spring框架,包括了ioc依赖注入,Context上下文.bean管理.sp ...
- 给jui(dwz)的菜单树换一套漂亮的图标
JUI是一个免费开源的框架,在使用初期,会遇到一些麻烦,因为文档实在太少了,完全不知道从哪里入门,但是,一旦你深入学习后,你会发现,你的选择是不错的,它会提高你开发的效率,同时,你会深深爱上它. 目前 ...
- simpleini库的介绍和使用(面向业务编程-格式处理)
simpleini库的介绍和使用(面向业务编程-格式处理) 介绍 simpleini是一个跨平台的ini格式处理库,提供了一些简单的API来读取和写入ini风格的配置文件.它支持ASCII.MBCS和 ...
- Android笔记--数据存储之SharedPreferences
SharedPreferences--轻量级存储工具(共享参数) 其采用的存储结构是Key-Value的键值对方式 SharedPreferences用法以及相关的简单案例 记住密码的实现 实现啦! ...
- 【绘制分形图案】多重收缩打印机(MRCM)举例
note 2020-08-05搬运 下面的内容来自我的CSDN博客 多重收缩打印机(MRCM)是生成分形图案的一种方法.主要思想还是多次迭代. 每次都是将上一次的输出拿来做线性仿射变换后重新组合在 ...
- AOP的九点核心概念和作用
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点 ...