CF935D Fafa and Ancient Alphabet 题解
讲一个很暴力的方法(为描述方便,下文 \(a\) 数组代表 \(s1\),\(b\) 数组代表 \(s2\))。
发现假如当前 \(a_i\ne b_i\),就不需要再向下枚举了,于是拥有了分类讨论的雏形。
我们设 \(inv\) 代表进行到这一步的概率,可分为以下四种情况:
- \(a_i>0,b_i>0\)。此时假如 \(a_i=b_i\),略过;若 \(a_i>b_i\),\(ans+=inv\),退出循环;否则直接退出循环。
- \(a_i>0,b_i=0\)。此时只需考虑确定的可增加概率和 \(inv\)。易得 \(inv=\frac{inv}{m},ans+=(a_i-1)inv\)。
- \(a_i=0,b_i>0\)。\(inv=\frac{inv}{m},ans+=(m-b_i)inv\)。
- \(a_i=0,b_i=0\)。\(ans+=\frac{m(m-1)}{2m^2}inv,inv=\frac{inv}{m}\)。
都是在 \(\mod p\) 意义下的。时间复杂度 \(O(n\log_2n)\),预处理一些快速幂可优化至 \(O(n)\)。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=1e9+7;
const int N=1e5+5;
ll qpow(ll x,int y){
ll re=1;
while(y){
if(y&1) re=re*x%p;
x=x*x%p;
y>>=1;
}return re;
}int n,a[N],b[N];
ll ans,inv=1,m;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
for(int i=1;i<=n;i++){
if(a[i]&&b[i]){
if(a[i]==b[i])
continue;
if(a[i]>b[i])
ans=(ans+inv)%p;
break;
}if(!a[i]&&!b[i]){
ans=(ans+m*(m-1)%p*qpow(m*m*2%p,p-2)%p*inv%p)%p;
inv=inv*qpow(m,p-2)%p;
}else if(!a[i]){
inv=inv*qpow(m,p-2)%p;
ans=(ans+(m-b[i])*inv%p)%p;
}else{
inv=inv*qpow(m,p-2)%p;
ans=(ans+(a[i]-1)*inv%p)%p;
}
}cout<<ans;
return 0;
}
CF935D Fafa and Ancient Alphabet 题解的更多相关文章
- 2018.12.12 codeforces 935D. Fafa and Ancient Alphabet(概率dp)
传送门 概率dp水题. 题意简述:给你数字表的大小和两个数列,数列中为0的数表示不确定,不为0的表示确定的,求第一个数列字典序比第二个数列大的概率. fif_ifi表示第i ni~ ni n位第一个 ...
- codeforce465DIV2——D. Fafa and Ancient Alphabet
概率的计算答案给出的这张图很清楚了,然后因为要求取模,a/b%M=a*b^-1%M=a*inv(b,M)%M; #include <cstdio> #include <cstring ...
- Codeforces 935D Fafa and Ancient Alphabet
题目链接 题意 给定两个\(n\)位的\(m\)进制数\(s1,s2\),所有出现的\(0\)均可等概率地被其他数字替换,求\(s1\gt s2\)的概率. 思路 从高位到低位,根据每一位上相应的\( ...
- Codeforces 935E Fafa and Ancient Mathematics dp
Fafa and Ancient Mathematics 转换成树上问题dp一下. #include<bits/stdc++.h> #define LL long long #define ...
- UVA1103 古代象形符号 Ancient Messages 题解
题目链接: https://www.luogu.org/problemnew/show/UVA1103 题目分析: 我们可以先进行矩阵的还原 for(int k=1;k<=4;k++) { a[ ...
- CodeForces 935E Fafa and Ancient Mathematics (树形DP)
题意:给定一个表达式,然后让你添加 n 个加号,m 个减号,使得表达式的值最大. 析:首先先要建立一个表达式树,这个应该很好建立,就不说了,dp[u][i][0] 表示 u 这个部分表达式,添加 i ...
- Codeforces 935E Fafa and Ancient Mathematics(表达式转树 + 树型DP)
题目链接 Codeforces Round #465 (Div. 2) Problem E 题意 给定一个表达式,然后用$P$个加号和$M$个减号填充所有的问号(保证问号个数等于$P + M$) ...
- 【学术篇】CF935E Fafa and Ancient Mathematics 树形dp
前言 这是一道cf的比赛题.. 比赛的时候C题因为自己加了一个很显然不对的特判WA了7次但找不出原因就弃疗了... 然后就想划水, 但是只做了AB又不太好... 估计rating会掉惨 (然而事实证明 ...
- CF935B Fafa and the Gates 题解
Content 一个动点 \(F\) 一开始在平面直角坐标系上原点的位置,随后它会移动 \(n\) 次,每次只能向上走或者向右走 \(1\) 个单位,求经过直线 \(y=x\) 的次数. 数据范围:\ ...
- 【HackerRank】 Game Of Thrones - I
King Robert has 7 kingdoms under his rule. He gets to know from a raven that the Dothraki are going ...
随机推荐
- PTA-1002
原先主要错误: 没有考虑到有关0的相关情况 观看的大佬代码 整理思路 无非就是在相同的指数的情况下,系数相加 因为最后是要从大到小输出来. 注意 要对最后的结果进行四舍五入: PTA的英语题对英语不好 ...
- uniapp安卓在线更新版本
实现逻辑 通过获取线上的版本号和app的版本号进行对比 查看是不是最新版 - app版本号小于线上版本号则不是最新版 提示更新 模拟检测更新请求 起一个服务,也就是检测更新的接口 返回值为最新版本号和 ...
- 加密Python项目代码之把Django或Flask项目打包成exe
目录 python代码仿泄露方案 -方案一:启动起来,把源代码删除 -方案二:pipinstaller 打包成可执行文件 -方案三:做到docker镜像中--->运行容器--->-e pa ...
- Anaconda功能、优点、安装步骤(安装视频)
目录 介绍 功能(包和环境的管理器) 优点(省时省心) 下载地址 安装教程 要点 conda 的常见命令 查询完整帮助文件 管理conda和anaconda 管理环境 包管理 其他 介绍 Anac ...
- 若依管理系统 -- 更换头像上传文件报错(/tmp/tomcat.8013579853364800617.8080/work/Tomcat/localhost/ROOT)
一.错误情况 1.错误截图 二.错误解决情况 1.若依官方解答的链接 2.若依解答原文 1)原因: 在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会 ...
- Qt编写本地摄像头综合应用示例(qcamera/ffmpeg/v4l2等)
一.功能特点 同时支持 qcamera.ffmpeg.v4l2 三种内核解析本地摄像头. 提供函数 findCamera 自动搜索环境中的所有本地摄像头设备,搜索结果信号发出. 支持自动搜索和指定设备 ...
- Qt音视频开发系列文章导航
文章 链接 1-vlc解码播放 https://qtchina.blog.csdn.net/article/details/107742836 2-vlc回调处理 https://qtchina.bl ...
- Qt编写安防视频监控系统26-硬件加速
一.前言 硬件加速这个功能在一年多以前就已经具备,当时对两个内核一个是ffmpeg内核.一个是vlc内核都做了对应的接口函数,只是当时为了简单没有在系统设置中做出接口,vlc做硬件加速不用自己写代码实 ...
- IM跨平台技术学习(十二):万字长文详解QQ Linux端实时音视频背后的跨平台实践
本文由QQ音视频团队贺坤分享原题"Linux QQ能打语音视频了!一文详解背后技术实现!",下文进行了排版和内容优化等. 1.引言 2024年6月6日,QQ For Linux 3 ...
- Python 并发编程实战:优雅地使用 concurrent.futures
在 Python 多线程编程中,concurrent.futures 模块提供了一个高层的接口来异步执行可调用对象.今天,我们将通过一个循序渐进的案例,深入了解如何使用这个强大的工具. 从一个模拟场景 ...