题意:给你三个杯子,一开始钥匙放在中间的杯子里,然后每一回合等概率将左右两个杯子中的一个与中间杯子交换。求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的更多相关文章

  1. CF696C PLEASE

    矩阵快速幂+扩展欧拉定理 对于一个矩阵\(A\),我们有\(A^n \equiv A^{n\% \phi(m)+\phi(m)}(\%m)\) 经过简单的列举或推导可得 设目前进行了\(x\)轮,\( ...

随机推荐

  1. Handler机制原理

    andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange). 1)Loo ...

  2. PHP连接MySQL数据库操作

    (原文链接:http://www.cnblogs.com/csensix/archive/2012/05/23/2515494.html) 方法一:普通方法(面向过程) 首先,先做出如下假设(也适用与 ...

  3. CAFFE学习笔记(五)用caffe跑自己的jpg数据

    1 收集自己的数据 1-1 我的训练集与测试集的来源:表情包 由于网上一幅一幅图片下载非常麻烦,所以我干脆下载了两个eif表情包.同一个表情包里的图像都有很强的相似性,因此可以当成一类图像来使用.下载 ...

  4. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 4)

    (四)列表附件 列表的附件也是文件系统的一部分,它依附于普通列表的列表条目之上(文档库没有附件),它的操作在一些地方和文档库中文档的操作非常类似.   1.附件的读取 一个列表条目的附件可以使用SPL ...

  5. python清除字符串中间空格的方法

    1.使用字符串函数replace >>> a = 'hello world' >>> a.replace(' ', '') 'helloworld' 看上这种方法真 ...

  6. java javassis crack class

    java javassis crack class java 反编译 android 反编译   1. jad http://varaneckas.com/jad/jad158e.linux.inte ...

  7. JavaScript函数setInterval()和setTimeout()正确的写法

    一.常规写法 1.1 不传参数 function a (x, y) { var i = 0; var b = function(){ console.log((x * y) + (i++)); } r ...

  8. 家里网速北京联通100m光纤

    http://www.speedtest.net/ http://cs1.bbn.com.cn:8800/gzweb/index.jsp

  9. 入坑第二式 golang入坑系列

    史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播.因 ...

  10. 002 MIRO发票校验采购订单项目科目分配类别检查增强-20150819

    BADI SE19:ZINVOICE_UPDATE   MIRO发票检验过账好模拟时,检查采购订单line 是否有固定资产的行项目,如果有固定资产项目,则弹出提示框,提示消息:存在规定资产采购项目! ...