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项目正 ...
随机推荐
- jooq简单使用
DSLContext首先简单的配置文件 <?xml version="1.0" encoding="UTF-8" standalone="yes ...
- .Net 5.0导出Execl的两种方式
项目中经常会用到表格的导入导出今天来简绍一下我所了解的两种方式 1.拼接成表格的简单方式直接导出,服务器上不用安装其他程序 可以直接导出 public async Task<FileResult ...
- zyb
- 生产环境出现CPU占用过高,分析思路和定位
top 定位cpu占比高的pidjps -l 定位具体是后台哪个应用程序ps -mp 进程id -o(自定义格式) THREAD,tid,time 定位当前进程所有线程占用cpu时间高的线程idjst ...
- windows监控web程序连接数
运行: win+R->perfmon.msc 右键,添加计数器 选择webservice中的current connection选项,再选中对应实例即可~
- day2Java程序基础
Java程序基础 Java程序基本结构 一个程序的基本单位是class,class是关键字 类名要求: 类名必须以英文字母开头,后接字母,数字和下划线的组合 习惯以大写字母开头 public除了修饰类 ...
- vue2+element表格拖拽
1.定义好拖拽元素 ref标识,以及 row-key="id" (row-key拖拽标识,拖拽后数据不会乱, id为tableDataNew数据对象id) 2.下载cnpm in ...
- Pod概述
Pod的类型 Pod的类型有如下两个: 自主式Pod:自主式Pod的含义简白来说就是不是被控制器管理的Pod,另一种就是被控制管理的Pod,不被控制器管理的Pod你会发现,它一旦死亡的话,就没有人把它 ...
- 11.8 消除闪烁(2)(harib08h)
ps:看书比较急,有错误的地方欢迎指正,不细致的地方我会持续的修改 11.8 消除闪烁(2)(harib08h) 11.7 消除闪烁(1)(harib08g)存在的问题: 鼠标放在计时器上会有 闪烁, ...
- 【经验分享】RTC 技术系列之视频编解码
要了解什么是视频编解码,首先我们需要了解什么是视频. 视频归根结底是一系列连续的图像帧,当这些图像以一定速率播放时,人眼就会判断其是连续活动的,这样就构成了视频. 那为什么要进行视频编解码呢,因为视频 ...