2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin
来源:互联网 发布:jquery高级编程 微盘 编辑:程序博客网 时间:2024/05/04 00:22
题意:
询问硬币K次,正面朝上次数为偶数。
思路:
矩阵优化了下。dp[i][0] = 下* dp[i-1][0] + 上*dp[i-1][1] (满足条件的)
dp[i][1]= 上*dp[i-1][0] + 下*dp[i-1][1] (不满足条件的)
#include <iostream>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <queue>#include <algorithm>using namespace std;typedef long long ll;const int maxn=3;struct Matrix//????{ ll a[maxn][maxn]; void init() { memset(a,0,sizeof(a)); for(int i=1;i<maxn;i++) a[i][i]=1; }} ;const ll mod=1000000007;Matrix mul(Matrix a,Matrix b) //(a*b)%mod ????{ Matrix ans; memset(ans.a,0,sizeof(ans.a)); for(int i=1;i<maxn;i++) for(int j=1;j<maxn;j++) { ans.a[i][j]=0; for(int k=1;k<maxn;k++) { ans.a[i][j]+=a.a[i][k]*b.a[k][j] ; ans.a[i][j]%=mod; } } return ans;}Matrix pow(Matrix a,ll m){ Matrix res ; memset(res.a,0,sizeof(res.a)); for(int i=1;i<maxn;i++) { res.a[i][i]=1; } while(m) { if(m&1) { res=mul(a,res); } a=mul(a,a); m/=2; } return res;}ll quick(ll n,ll m){ ll ans = 1; while(m){ if(m & 1) ans = ans * n % mod; m >>= 1; n = n * n % mod; } return ans;}int main(){ double p; int t=0; int n; scanf("%d",&t); while(t--) { ll p,q,k; scanf("%lld%lld%lld",&p,&q,&k); ll nums= q*quick(p,mod-2)%mod; ll numx=(p-q)*quick(p,mod-2)%mod; Matrix ans; ans.a[1][1]=(numx)%mod; ans.a[2][1]=(nums)%mod; // printf("%lld\n",quick(27,mod-2)%mod*14%mod); /* ll pp = (numx * numx % mod + nums * nums % mod) % mod; ll qq = (numx * numx) % mod; printf("%lld\n",(pp * numx % mod + qq * nums % mod) % mod);*/ if(k==1) { printf("%lld\n",ans.a[1][1]%mod); continue; } Matrix base,res; base.a[1][1]=numx,base.a[1][2] =nums; base.a[2][1]=nums,base.a[2][2]= numx; res=pow( base, k - 1 ); ans=mul( base,res); printf("%lld\n",ans.a[1][1]%mod); }}
阅读全文
0 0
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B. Coin(概率)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B Coin (概率计算)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B. Coin(矩阵快速幂)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin(组合数)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B Coin (概率计算)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B.Coin(数学推公式)
- 计蒜客 17115 Coin(2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin (概率公式+快速幂)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛b题Coin(矩阵快速幂)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B. Coin
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B题 coin
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B coin
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛: B. Coin
- Coin (2017 ACM-ICPC 亚洲区(西安赛区)网络赛B题)
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B. Coin
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B.Coin(基本概率+二项式展开)
- ViewPager+Fragment实现选项卡,并…
- ScrollView嵌套ListView只显示一行
- Android是否联网判断
- [模板]最小生成树 kruskal算法
- Android PopupWindow简单显示
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin
- Java语法基础练习题(2)
- unity3d学习日记:使用[System.Serializable]在inspector面板内显示自定义数据类型类实例对象的内部数据
- Dubbo启动时对服务检查
- 并查集
- Java学习笔记~关于类与对象的总结01
- POJ 3048 John <Anti-SG(SJ定理)>
- 一周学习Html5+Css基础知识
- 线程池