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 ...
随机推荐
- Linux系统下搭建DNS服务器——DNS原理总结
2017-01-07 整理 DNS原理 域名到IP地址的解析过程 IP地址到域名的反向域名解析过程 抓包分析DNS报文和具体解析过程 DNS服务器搭建和配置 这个东东也是今年博主参见校招的时候被很多公 ...
- C语言之数组
数组 数组就是在内存空间中,开辟一个大的空间,然后再将这个大的空间均的分为若干份的小空间,每个小空间用来保存一个数据. 1). 数组的专业术语: 长度:指的能存放数据的个数 下标/索引:每一个数据所在 ...
- Python print报ascii编码异常的靠谱解决办法
之前遇到此异常UnicodeEncodeError: 'ascii' codec can't encode characters...,都是用这种方式解决:sys.setdefaultencoding ...
- Perception(0-1.1)
The perception modules run in the context of the process Cognition. They detect features in the imag ...
- Kubernetes(k8s)容器运行时(CRI)
Kubernetes节点的底层由一个叫做"容器运行时"的软件进行支撑,它负责比如启停容器这样的事情.最广为人知的容器运行时当属Docker,但它不是唯一的.事实上,容器运行时这个领 ...
- windows下后台运行程序
方法一:使用vbs启动,新建一个vbs脚本,内容如下: set ws=WScript.CreateObject("WScript.Shell") ws.Run 方法二:将程序注册成 ...
- chap3 数组 #C
4.1 数组的基本概念 4.1.1 要点归纳 一维数组 定义: int a[10]; 数组名是一个地址常量,不允许修改. 引用: 初始化: 静态数组 static int a[10];的初值? 全部赋 ...
- JavaScript简单的一些....
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在vim编辑器中,删除操作
我这里在编辑一个很大的文件,有几万行,都是文件名sheetid, 中间有很多空行,我现在要做的事情就有要把这个文件中的空行都删除掉,这个本来想在ultraedit里面完成的,结果弄了好半天都没有搞定, ...
- CodeForces 687B Remainders Game
数论. 如果$x$不唯一,假设存在两个解,较大的为${x_1}$,较小的为${x_2}$. 那么, $\left\{ {\begin{array}{*{20}{c}}{{x_1}\% {c_i} = ...