CodeForces 696C PLEASE
快速幂,费马小定理,逆元。
设$dp[n]$表示$n$次操作之后的概率,那么$dp[n] = \frac{{(1 - dp[n - 1])}}{2}$。$1-dp[n - 1]$表示上一次没有在中间的概率,除以$2$表示$n$次操作之后的情况数是$n-1$次操作之后的两倍,所以要除以$2$,这个画画图就可以知道了。
也就是说,现在我们知道了$ - 2×dp[n] = dp[n - 1] - 1$
我们假设$ - 2*(dp[n] + X) = dp[n - 1] + X$,利用待定系数法,可以求得$X = - \frac{1}{3}$。
那么,$\frac{{dp[n] - \frac{1}{3}}}{{dp[n - 1] - \frac{1}{3}}} = - \frac{1}{2}$。 因此,$dp[n] - \frac{1}{3}$是首项为$ - \frac{1}{3}$,公比为$ - \frac{1}{2}$的等比数列。
可以计算得到:$dp[n] = \frac{{{{( - 1)}^n} + {2^{n - 1}}}}{{3×{2^{n - 1}}}}$。
通过观察可以发现,${{{( - 1)}^n} + {2^{n - 1}}}$与${{2^{n - 1}}}$之间必然是互质的,那么分子与分母之间的公约数要么是$3$,要么没有公约数。
所以,如果分子能被$3$整除,那么分子分母同除以$3$,即分子和分母再$×3$的逆元。
求解${{2^{n - 1}}}$可以通过费马小定理:${a^x}\% p = {a^{x\% \phi (p) + \phi (p)}}\% p$。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
char c = getchar(); x = ;while(!isdigit(c)) c = getchar();
while(isdigit(c)) { x = x * + c - ''; c = getchar(); }
} const int maxn=;
int k;
LL mod=1e9+,pmod=1e9+;
LL n,a[maxn]; LL extend_gcd(LL a,LL b,LL &x,LL &y)
{
if(a==&&b==) return -;
if(b==){x=;y=;return a;}
LL d=extend_gcd(b,a%b,y,x);
y-=a/b*x;
return d;
} LL mod_reverse(LL a,LL n)
{
LL x,y;
LL d=extend_gcd(a,n,x,y);
if(d==) return (x%n+n)%n;
else return -;
} LL POW(LL a,LL b,LL m)
{
LL d,t;
d=; t=a;
while (b>)
{
if (b%==) d=(d*t)%m;
b/=; t=(t*t)%m;
}
return d;
} int main()
{
scanf("%d",&k);
for(int i=;i<=k;i++) scanf("%lld",&a[i]);
LL f=,z=;
for(int i=;i<=k;i++)
{
f=f*(a[i]%)%, z=z*(a[i]%pmod)%pmod;
}
z=(z-+pmod)%pmod+pmod; if(f%==) f=; else f=-;
LL fz=POW(,z,mod); fz=(fz+f+mod)%mod;
LL fm=POW(,z,mod); z=; for(int i=;i<=k;i++) z=z*(a[i]%)%;
z=(z-+)%+;
LL t=POW(,z,); t=(t+f+)%;
if(t==) fz=fz*mod_reverse(,mod)%mod;
else fm=*fm%mod; printf("%lld/%lld\n",fz,fm);
return ;
}
CodeForces 696C PLEASE的更多相关文章
- codeforces 696C PLEASE 概率dp+公式递推+费马小定理
题意:有3个杯子,排放一行,刚开始钥匙在中间的杯子,每次操作,将左右两边任意一个杯子进行交换,问n次操作后钥匙在中间杯子的概率 分析:考虑动态规划做法,dp[i]代表i次操作后的,钥匙在中间的概率,由 ...
- codeforces 696C C. PLEASE(概率+快速幂)
题目链接: C. PLEASE time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
随机推荐
- SmoOne——开源免费的企业移动OA应用,基于VS.Net
一.SmoOne是什么一个开源的移动OA应用 二.语言.Net 三.开发环境Visual Studio 四.开发平台Smobiler Designer 五.功能该应用开源代码中包含注册.登录.用户信息 ...
- 你真的懂javascript中的 “this” 吗?
一.前言: 我们知道 "this" 是javascript语言的一个关键字,在编写javascript代码的时候,经常会见到或者用到它. 但是,有一部分开发朋友,对 "t ...
- 隐藏或删除指定的html元素
<div id="Contain"> <div>好好学习<div> <div>天天向上<div> <div> ...
- es5 数组
一. 数组申明 var a = new Array(5) 会生成一个长度为5 每个元素都是undifined的数组 var a = new Array(1,2,3) 跟 var a = [1,2,3 ...
- JavaEE XML DOM创建之DOM4J
DOM4J创建xml文档 @author ixenos 1 写出内容到xml文档 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt ...
- win7、win8.1淡绿色护眼模式设置
Win7设置: 右击桌面 -> 个性化 -> 窗口颜色 -> 高级外观设置 选中 -> 项目:窗口 颜色:其他 修改:色调 饱和度 亮度 红 绿 蓝 添加到自定义 ...
- 学习Sass(二)
前面简单介绍了sass的安装,特点和使用方法等,这里记录下sass的基本语法. 1.变量 2.运算 3.嵌套 4.代码复用 5.高级语法 6.自定义函数 一.变量 变量以$开始,像css属性那样赋值, ...
- VS插件-JSEnhancements
在Visaul Studio 2010中写js或css代码,缺少像写C#代码时的那种折叠功能,当代码比较多时,就很不方便. 今天发现,已经有VS2010扩展支持这个功能,它就是——JSEnhancem ...
- 【原创】RMQ - ST算法详解
ST算法: ID数组下标: 1 2 3 4 5 6 7 8 9 ID数组元素: 5 7 3 1 4 8 2 9 8 1.ST算法作 ...
- 自动生成 Makefile (automake/autoconf 入门)
作为Linux 下的程序开发人员,大家一定都遇到过Makefile ,用make 命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile ,如果要想写出一个符合自由软件 ...