CF697E && CF696C PLEASE
题意:给你三个杯子,一开始钥匙放在中间的杯子里,然后每一回合等概率将左右两个杯子中的一个与中间杯子交换。求n回合之后钥匙在中间杯子的概率。这里要求概率以分数形式输出,先化成最简,然后对1e9 + 7取模。
题解:首先我们可以轻易得到一个递推式:$ d[i] = \frac{{1 - d[i - 1]}}{2} $
但递推式是不行的,我们要得到一个封闭形式。
运用数列技巧,我们可以进行如下变换:$d[i] - \frac{1}{3} = - \frac{1}{2}(d[i - 1] - \frac{1}{3})$
那么我们有 $d[n] = \frac{{{{( - 1)}^n} + {2^{n - 1}}}}{{3 \times {2^{n - 1}}}}$
其中我们发现,${{{( - 1)}^n} + {2^{n - 1}}}$ 一定是3的倍数,且商一定是奇数,所以与剩下部分互质
也即 $p = \frac{{{{( - 1)}^n} + {2^{n - 1}}}}{3}$ $q = {2^{n - 1}}$
带进去算就好了。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define mod 1000000007 inline LL read() {
LL x = , f = ; char a = getchar();
while(a < '' || a > '') { if(a == '-') f = -; a = getchar(); }
while(a >= '' && a <= '') x = x * + a - '', a = getchar();
return x * f;
} int n, p = , q, f = ; inline int fpow(int x, LL k) {
int ret = ;
while(k) {
if(k & ) ret = 1LL * ret * x % mod;
k /= ; x = 1LL * x * x % mod;
}
return ret;
} int main() {
n = read();
LL tmp; int inv2 = fpow(, mod -), inv3 = fpow(, mod - );
for(int i = ; i <= n; i++) {
tmp = read();
f = 1LL * f * tmp % ;
p = fpow(p, tmp);
}
q = 1LL * p * inv2 % mod;
p = 1LL * (q + (f ? - : )) * inv3 % mod;
printf("%d/%d\n" ,p ,q);
return ;
}
CF697E && CF696C PLEASE的更多相关文章
- CF696C PLEASE
矩阵快速幂+扩展欧拉定理 对于一个矩阵\(A\),我们有\(A^n \equiv A^{n\% \phi(m)+\phi(m)}(\%m)\) 经过简单的列举或推导可得 设目前进行了\(x\)轮,\( ...
随机推荐
- python MD5操作
def my_md5(str): import hashlib new_str = str.encode() #把字符串转成bytes类型 # new_str = b'%s'%str #把字符串转成b ...
- Bootstrap支持的JavaScript插件
1.导入JavaScript插件 Bootstrap除了包含丰富的Web组件之外,如前面介绍的下拉菜单.按钮组.导航.分页等.他还包括一些JavaScript的插件. Bootstrap的JavaSc ...
- Linux下安装MongoDB全程记录
1.下载安装包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.6.0.tgz 2.解压缩 [root@loca ...
- 我的Android进阶之旅------>Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi")
Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi") 例如:AndroidManifest.xml中,我们配置了sdk版本的 ...
- nodejs post请求
const http = require('http'); const querystring = require('querystring'); const postData = querystri ...
- 学习pyhton需要做哪些准备工作
1:知道python个版本是有差异的 2:既然有差异,那么如何在不同项目不同版本的开发环境; ----------------------------------------------------- ...
- 用django写个CMS系统
上一篇介绍过django自带的flatpages,能够做简单的CMS.但是对于我们的真正的工作中的使用意义并不大.还是自己动手写一个吧. 不用说,一定是先从models开始的: from django ...
- mysql数据库补充知识4 数据备份和pymysql模块
一 介绍 #注意: 批量加注释:ctrl+?键 批量去注释:ctrl+shift+?键 二 MySQL数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如W ...
- 【整理学习Hadoop】H D F S 一个分布式文件系统
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别 ...
- LVM逻辑磁盘管理
一.简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵 ...