Codeforces 935D Fafa and Ancient Alphabet
题目链接
题意
给定两个\(n\)位的\(m\)进制数\(s1,s2\),所有出现的\(0\)均可等概率地被其他数字替换,求\(s1\gt s2\)的概率。
思路
从高位到低位,根据每一位上相应的\(0\)的个数进行 分类讨论。
计算每一位的时候加上这样一部分答案:比到该位恰能比出大小的情况数。
恰能比出大小意味着:高位全部相同,该位\(s1\gt s2\),低位随便怎么取。
因此,需对两个数目进行记录:1. 前面有多少位是两者皆0;2. 后面还有多少个0没有确定。
另:\(x\)关于\(mod\)的乘法逆元为\(x^{(mod-2)}\),由费马小定理易得。
注意:要对\(m\)的幂次进行预处理。
Code
#include <bits/stdc++.h>
#define maxn 100010
#define F(i, a, b) for (int i = (a); i < (b); ++i)
#define F2(i, a, b) for (int i = (a); i <= (b); ++i)
#define dF(i, a, b) for (int i = (a); i > (b); --i)
#define dF2(i, a, b) for (int i = (a); i >= (b); --i)
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
int a[maxn], b[maxn];
LL rec[maxn*2];
LL poww(LL a, LL b) {
    LL ret = 1;
    while (b) {
        if (b&1) (ret *= a) %= mod;
        (a *= a) %= mod;
        b >>= 1;
    }
    return ret;
}
LL f(LL p, LL q) {
    return p * poww(q, mod-2) % mod;
}
LL GCD(LL a, LL b) { return b ? GCD(b, a%b) : a; }
int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    LL NUM = (1LL*m*m%mod-m+mod)%mod * poww(2, mod-2) % mod;
    int tot=0;
    F(i, 0, n) { scanf("%d", &a[i]); if (!a[i]) ++tot; }
    F(i, 0, n) { scanf("%d", &b[i]); if (!b[i]) ++tot; }
    rec[0] = 1;
    F2(i, 1, tot) rec[i] = rec[i-1]*m%mod;
    LL q = poww(m, tot), p=0;
    int cnt=0, prev=0;
    F(i, 0, n) {
        if (a[i]&&b[i]) {
            if (a[i]>b[i]) (p += rec[cnt+tot-prev]) %= mod;
            if (a[i]!=b[i]) { printf("%I64d\n", f(p, q)); return 0; }
        }
        else if (!a[i] && !b[i]) {
            prev += 2;
            (p += (rec[cnt+tot-prev] * NUM % mod)) %= mod;
            ++cnt;
        }
        else {
            ++prev;
            if (a[i]) (p += rec[cnt+tot-prev] * (a[i]-1) % mod) %= mod;
            else (p += (rec[cnt+tot-prev] * (m-b[i]) % mod)) %= mod;
        }
    }
    LL gcd = GCD(p, q);
    p /= gcd, q /= gcd;
    printf("%I64d\n", f(p, q));
    return 0;
}
Codeforces 935D Fafa and Ancient Alphabet的更多相关文章
- 2018.12.12 codeforces 935D. Fafa and Ancient Alphabet(概率dp)
		传送门 概率dp水题. 题意简述:给你数字表的大小和两个数列,数列中为0的数表示不确定,不为0的表示确定的,求第一个数列字典序比第二个数列大的概率. fif_ifi表示第i ni~ ni n位第一个 ... 
- Codeforces 935E Fafa and Ancient Mathematics dp
		Fafa and Ancient Mathematics 转换成树上问题dp一下. #include<bits/stdc++.h> #define LL long long #define ... 
- Codeforces  935E Fafa and Ancient Mathematics(表达式转树 + 树型DP)
		题目链接 Codeforces Round #465 (Div. 2) Problem E 题意 给定一个表达式,然后用$P$个加号和$M$个减号填充所有的问号(保证问号个数等于$P + M$) ... 
- CodeForces 935E Fafa and Ancient Mathematics (树形DP)
		题意:给定一个表达式,然后让你添加 n 个加号,m 个减号,使得表达式的值最大. 析:首先先要建立一个表达式树,这个应该很好建立,就不说了,dp[u][i][0] 表示 u 这个部分表达式,添加 i ... 
- codeforce465DIV2——D. Fafa and Ancient Alphabet
		概率的计算答案给出的这张图很清楚了,然后因为要求取模,a/b%M=a*b^-1%M=a*inv(b,M)%M; #include <cstdio> #include <cstring ... 
- 【学术篇】CF935E Fafa and Ancient Mathematics 树形dp
		前言 这是一道cf的比赛题.. 比赛的时候C题因为自己加了一个很显然不对的特判WA了7次但找不出原因就弃疗了... 然后就想划水, 但是只做了AB又不太好... 估计rating会掉惨 (然而事实证明 ... 
- 2019暑训第一场训练赛  |(2016-icpc区域赛)部分题解
		// 今天下午比赛自闭了,晚上补了题,把AC的部分水题整理一下,记录坑点并吸取教训. // CF补题链接:http://codeforces.com/gym/101291 A - Alphabet 题 ... 
- [codeforces 260]B. Ancient Prophesy
		[codeforces 260]B. Ancient Prophesy 试题描述 A recently found Ancient Prophesy is believed to contain th ... 
- CodeForces 164 B. Ancient Berland Hieroglyphs 单调队列
		B. Ancient Berland Hieroglyphs 题目连接: http://codeforces.com/problemset/problem/164/B Descriptionww.co ... 
随机推荐
- jquery 省市区联动插件
			使用方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ... 
- pandas库Series类型与基本操作
			pandas读取excel的类型是dataFrame,然后提取每一列是一个Series类型 Series类型包括index和values两部分 a = pd.Series({'a':1,'b':5}) ... 
- django实现事务
			1.导入模块 from django.db import transaction 2.使用方法 with transaction.atomic(): User.objects.create(name= ... 
- Xadmin后台管理系统搭建基于Django1.11.11+Python3.6
			安装python及Django百度即可 主要介绍Xadmin安装 访问地址:https://github.com/sshwsfc/xadmin 下载 安装好之后,将xamdin目录复制到项目 我放在 ... 
- 权限组件(11):基于formset实现批量增加
			效果图: 增加页面: 编辑页面: 因为后面要对权限进行批量操作,所以先用这个示例演示下如何实现批量操作 数据库 from django.db import models class Menu(mode ... 
- TS各个表 与 SECTION 的解析 CAS原理
			TS流,通过一个个的TS包来传送: TS包可以是传送PSI SI等各表的数据包,也可以是传送节目音视频数据(携带的PES包:音视频基本流包)的包:TS携带 PSI SI等表的数据时,各个表以各表对应的 ... 
- HDU_6194 后缀数组+RMQ
			好绝望的..想了五个多小时,最后还是没A...赛后看了下后缀数组瞬间就有了思路...不过因为太菜,想了将近两个小时才吧这个题干掉. 首先,应当认为,后缀数组的定义是,某字符串S的所有后缀按照字典序有小 ... 
- proget Android代码混淆
			混淆的时候,还要添加Android.jar,不然,你的程序一篇空白.我就吃了亏. 还有,activity是不能混淆的,因为AndroidMeaxinfast.xml里面会找他. 
- 03017_ajax
			1.Ajax概述 (1)什么是同步,什么是异步? ①同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态: ②异步现象:客户端发送请求到服务器端,无论服务器是否返回响应, ... 
- iOS下单例模式实现(二)利用宏定义快速实现
			在上一节里提到了用利用gcd快速实现单例模式. 一个项目里面可能有好几个类都需要实现单例模式.为了更高效的编码,可以利用c语言中宏定义来实现. 新建一个Singleton.h的头文件. // @int ... 
