Description

众所周知,有一个神秘的组织——战忽局,在暗中保护着我们。在局中任职的官员都有着极强的忽悠技巧,不只能用预言,还能用往事忽悠人。如今某外星间谍已经获得了战忽局曾经参与的n次事件的资料,局座发现了这件事,于是决定再次用忽悠来保证战忽局的安全。局座将发表m次演讲,每一天他都会从n事件中等概率地挑选一件混淆众人,由于局座每天很忙,不能把之前将的事件都记录下来,因此他可能会重复选择某一件事。现在局座想知道,m次演讲过后,期望能使多少事件混淆众人。

Input

第一行一个整数T(1<=T<=1000),表示数据组数。接下来T行每行两个正整数n,m(1<=n,m<=1e18)分别表示事件数和局座演讲的次数。

Output

对于每组数据输出一行一个实数ans,表示局座在m次演讲之后期望混淆众人的事件数,你输入的数和标准答案的相对误差不超过1e-6视为正确。

Input示例

3
2 2
10 100000
3 2

Output示例

1.5000000
10.0000000
1.6666667

思路

定义 fx f_x 为 n n 个事件,忽悠 xx 次的期望事件数。

显然, fx=fx−1+(1−fx−1n)=1+n−1nfx−1 f_x=f_{x-1}+(1-\frac{f_{x-1}}{n})=1+\frac{n-1}{n}f_{x-1} 。

于是构造出矩阵:

⎛⎝⎜f1010⎞⎠⎟×⎛⎝⎜⎜⎜n−1n101⎞⎠⎟⎟⎟m−1

\begin{pmatrix} f_1 & 1 \\\\ 0 & 0 \end{pmatrix} \times \begin{pmatrix} \frac{n-1}{n} & 0 \\\\ 1 & 1 \end{pmatrix}^{m-1}

用快速幂简单写一下就好了,其中 f1=1 f_1=1 。

注意 long double 貌似精度也不够,可以用 __float128

AC 代码

#include<bits/stdc++.h>
#include<quadmath.h>
#define IO ios::sync_with_stdio(false);\cin.tie(0);\cout.tie(0);
using namespace std;
typedef long long LL;
typedef __float128 LB;
const int maxn = 1e8+10;struct node
{LB mp[2][2];
} init,res;struct node Mult(struct node x,struct node y)
{struct node tmp;for(int i=0; i<2; i++)for(int j=0; j<2; j++){tmp.mp[i][j]=0;for(int k=0; k<2; k++)tmp.mp[i][j]+=x.mp[i][k]*y.mp[k][j];}return tmp;
}struct node expo(struct node x, LL k)
{struct node tmp;memset(tmp.mp,0,sizeof(tmp.mp));tmp.mp[0][0] = tmp.mp[1][1] = 1;while(k){if(k&1) tmp=Mult(tmp,x);x=Mult(x,x);k>>=1;}return tmp;
}void solve(LL n,LL m)
{init.mp[0][0] = LB(n-1) / n;init.mp[0][1] = 0;init.mp[1][0] = 1;init.mp[1][1] = 1;res = expo(init,m-1);cout<<fixed<<setprecision(12)<<double(res.mp[0][0]+res.mp[1][0])<<endl;
}int main()
{IO;int T;cin>>T;while(T--){LL n,m;cin>>n>>m;solve(n,m);}return 0;
}

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 战忽局的手段 矩阵乘法

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

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

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

  5. 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) 公式有了,然后就是卡精度问 ...

  6. 51nod 1836:战忽局的手段

    51nod 1836:战忽局的手段 题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1836 矩阵快速幂 从题目 ...

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

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

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

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

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

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

最新文章

  1. 成长型思维模式Not yet
  2. 【R语言-20行代码】牛顿迭代法求伽马函数极大似然估计法的参数估计
  3. 聊聊成为大神路上的过程
  4. java异步servlet_Servlet 3.0 异步处理详解
  5. P1297 [国家集训队]单选错位 期望
  6. [机器学习-实践篇]贝叶斯算法
  7. Java中大数值是什么?数值想存多大存多大
  8. 计算机台式电源3c号,台式机电源选购经验:3C认证是必须的!(2)
  9. svd pca matlab,从SVD到PCA——奇妙的数学游戏
  10. html插入精灵,帮助插入超链接到CSS精灵代码..Java? HTML?
  11. visual studio 安装教程
  12. System V 共享内存 和 系列函数
  13. Exchange 2010安装各角色先决条件的Powershell
  14. 如何制作出色的R可重现示例
  15. [转载]C#异步调用四大方法详解
  16. 【LeetCode】【数组】题号:*48,旋转图像
  17. 小学初中数据常用定理公式总结-------复习一下
  18. 解决“Could not build wheels for xx which use PEP 517 and cannot be installed directly“问题
  19. python颜色画线_matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
  20. 准确的找到BAT实习机会~我入职了腾讯

热门文章

  1. JavaScript专题(二)数组去重,会就要会的理直气壮
  2. 计算时间差C语言实现
  3. scrapy 中没有 crawl 命令
  4. 失去诚信的老板,不会再合作!
  5. 2022-2028年中国财政电子票据行业市场发展潜力及投资前景分析报告
  6. R语言作图—— Bubble Matrix(气泡矩阵图)
  7. zcmu 1633: 酷酷的单词
  8. python计算狗的年龄_狗一岁相当于人几岁?怎样确定狗狗的年龄
  9. 2020-11-05 css实例:轮播图上的小圆点
  10. 深入了解iOS中的OOM(低内存崩溃)