51nod 1836:战忽局的手段

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1836

矩阵快速幂

从题目所给的数据范围来看复杂度应该为O(1)或者O(lgn),于是定义ƒ(x)为n个事件,x次忽悠下的期望事件数

很明显可以得到这样一个递推式:ƒ(x)=ƒ(x-1)+[1-ƒ(x-1)/n]=1+(1-1/n)ƒ(x-1)

于是我们就可以构造矩阵以O(lgn)的复杂度来解这道题啦。

/*注意这道题卡精度,可以用__float128来保存中间变量减少精度丢失*/

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 typedef long long ll;
 5 ll T,n,m;
 6 struct matrix{
 7     __float128 mp[2][2];
 8     friend matrix operator * (matrix a,matrix b){
 9         matrix t;
10         for(int i=0;i<2;++i)
11         for(int j=0;j<2;++j){
12             t.mp[i][j]=0;
13             for(int k=0;k<2;++k)
14                 t.mp[i][j]+=a.mp[i][k]*b.mp[k][j];
15         }
16         return t;
17     }
18 }E,A;
19 matrix pow(matrix A,ll n){
20     matrix base=A,ans=E;
21     while(n){
22         if(n&1)ans=ans*base;
23         base=base*base;
24         n>>=1;
25     }
26     return ans;
27 }
28 int main(void){
29     E.mp[0][0]=E.mp[1][1]=1;
30     E.mp[0][1]=E.mp[1][0]=0;
31     scanf("%lld",&T);
32     while(T--){
33         scanf("%lld%lld",&n,&m);
34         A.mp[0][0]=(__float128)1-(__float128)1/(__float128)n;A.mp[0][1]=1;
35         A.mp[1][0]=0;A.mp[1][1]=1;
36         matrix temp=pow(A,m-1);
37         double ans=(double)(temp.mp[0][0]+temp.mp[0][1]);
38         printf("%.7lf\n",ans);
39     }
40 }

当然也可以将递推式继续推算下去,以O(1)的复杂度解决。(数据小的话直接用math.h,否则直接取极限)

转载于:https://www.cnblogs.com/barrier/p/6420165.html

51nod 1836:战忽局的手段相关推荐

  1. 51nod 1836战忽局的手段(期望+矩阵快速幂)

    战忽局的手段 n n n个事件, m m m次演讲 定义 d p [ i ] dp[i] dp[i]为 i i i次演讲的期望次数 d p [ 1 ] = 1 dp[1]=1 dp[1]=1 d p ...

  2. 51nod 1836 战忽局的手段 矩阵乘法

    题意 众所周知,有一个神秘的组织--战忽局,在暗中保护着我们.在局中任职的官员都有着极强的忽悠技巧,不只能用预言,还能用往事忽悠人.如今某外星间谍已经获得了战忽局曾经参与的n次事件的资料,局座发现了这 ...

  3. 51nod 1836 战忽局的手段 (期望)

    Description 众所周知,有一个神秘的组织--战忽局,在暗中保护着我们.在局中任职的官员都有着极强的忽悠技巧,不只能用预言,还能用往事忽悠人.如今某外星间谍已经获得了战忽局曾经参与的n次事件的 ...

  4. 51nod 1836 战忽局的手段(期望+矩阵快速幂)

    众所周知,有一个神秘的组织--战忽局,在暗中保护着我们.在局中任职的官员都有着极强的忽悠技巧,不只能用预言,还能用往事忽悠人.如今某外星间谍已经获得了战忽局曾经参与的n次事件的资料,局座发现了这件事, ...

  5. 51nod 1836:战忽局的手段(期望)

    题目链接 公式比较好推 精度好难搞啊@_@ 下面记笔记@_@ ****在CodeBlocks中,输出double型变量要使用%f (参见http://bbs.csdn.net/topics/39193 ...

  6. 51nod 1836 战忽局的手段

    设 f(m) 表示m次演讲后忽悠的期望,那么很容易得出: f(m)=f(m-1)+1*(n-f(m-1))/n 整理得到 f(m)-n=(n-1)/n*(f(m-1)-n) 公式有了,然后就是卡精度问 ...

  7. 51nod算法马拉松20 C、战忽局的手段

    战忽局的手段 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 众所周知,有一个神秘的组织--战忽局,在暗中保护着我们.在局中任职的官员都有着极强的忽悠技巧,不只能用预言,还能用往事忽 ...

  8. 【51Nod1836】战忽局的手段

    众所周知,有一个神秘的组织--战忽局,在暗中保护着我们.在局中任职的官员都有着极强的忽悠技巧,不只能用预言,还能用往事忽悠人.如今某外星间谍已经获得了战忽局曾经参与的n次事件的资料,局座发现了这件事, ...

  9. 战忽局总局影部部长赞了乡村振兴战略下传统村落文化旅游设计,来自许少辉博士的视频消息中心 ​​​

    战忽局总局影部部长赞了乡村振兴战略下传统村落文化旅游设计,来自许少辉博士的视频消息中心 ​​​

最新文章

  1. vivado----fpga硬件调试 (二)----mark_debug
  2. c语言对称矩阵的压缩存储_【数据结构】对称矩阵及对称矩阵的压缩存储
  3. assert()函数
  4. 国产编程语言又造假,丢不起这人!
  5. 古老的spc也可以用机器学习(三)-支持向量机算法
  6. Python中文全攻略
  7. hdu 1250 Hat's Fibonacci
  8. Chrome谷歌浏览器新功能 删除主题更方便
  9. T-SQL中的透视和逆透视
  10. 技术圈的女性工程师都去哪呢?
  11. zabbix4.2中163邮箱25端口无法发送邮件
  12. @Controller深入详解
  13. HTML5能取代Android和iOS应用程序吗?
  14. 精力充沛才能走得更远更从容
  15. 常见协议RFC对应表
  16. 【STM32H750】玩转ART-Pi(二)——制作MDK的外部QSPI-FLASH烧录算法
  17. Cocos2dx基础手册
  18. 求关于oled屏的闪屏问题
  19. Win10提示缺少mscomctl.ocx文件
  20. 计算机网络:TCP实现聊天功能

热门文章

  1. 小猿圈Linux 之用户和用户组管理(二)
  2. 如何迅速分析出系统CPU的瓶颈在哪里?
  3. 三星手机即将获得完整的Linux发行版支持
  4. webstorm 10.0.4 注册码
  5. hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))
  6. 外网质量监控系统实践之路
  7. 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。
  8. 求输入的单词个数(单词间用空格隔开 不限空格个数) 首尾不能用空格
  9. 关于字体图标在firefox上本地访问无法显示的问题分析
  10. redis专题:redis的常用数据结构及使用场景