Description

随机生成一个长度为m且每个元素都为1~n之间的整数的单调不下降序列~(即序列的(i>1)都不小于),(随机生成指每一种可能的序列都等概率被生成)。请问这个序列的众数出现次数期望是多少,有多组数据。
 

Input

第一行一个整数T,为数据组数
接下来T行,每行两个被空格隔开的正整数m,n为序列长度和元素的值的上界。

Output

一共T行,每一行一个实数,为每组数据的答案
如果你的答案与标准答案的误差不超过1e-5,则视为正确

 

Sample Input

4
1 5
3 3
2 9
9 6

Sample Output

1.0000000000
2.2000000000
1.2000000000
4.3146853147
 

Data Constraint

对于10%的数据:n,m<=5,T=1
对于另外20%的数据:m<=15,T<=5
对于另外20%的数据:n,m<=50, T<=5
对于100%的数据:1<=m<=250,1<=n<=1e9,T<=15

 

Hint

对于3 3这一组数据,有以下情况(x为众数出现的次数)
1 1 1 (x = 3) 
1 1 2 (x = 2) 
1 1 3 (x = 2) 
1 2 2 (x = 2) 
1 2 3 (x = 1) 
1 3 3 (x = 2) 
2 2 2 (x = 3) 
2 2 3 (x = 2) 
2 3 3 (x = 2) 
3 3 3 (x = 3) 
所以期望是1/10+2*6/10+3*3/10=22/10

Solution

看看应该是一道dp

可以有这样一个思路

令f(i,j)为构造出的序列长度为i,当前填入序列第j种数,为了限制众数的出现次数,要去除所有众数出现次数大于限定的情况

因此,f(k,i,j)=f(k,i-1,j-1)+f(k,i-1,j)-f(k,i-k-1,j-1),其中k代表限定众数出现次数为k

最后乘上一个组合数就是答案了

#include <stdio.h>
#include <string.h> template<class T> inline void read(T &x)
{
int c=getchar();
for(x=0;c<48||c>57;c=getchar());
for(;c>47&&c<58;c=getchar())x=(x<<1)+(x<<3)+c-48;
} int T,m,n;
long double C[255],f[255][255][255],g[255],ans; int main()
{
freopen("assignment.in","r",stdin);
freopen("assignment.out","w",stdout);
for(int k=1;k<=250;k++)
{
f[k][0][0]=1;
for(int i=1;i<=250;i++)
for(int j=1;j<=i;j++)
{
f[k][i][j]=f[k][i-1][j-1]+f[k][i-1][j];
if(i-k-1>=0)f[k][i][j]-=f[k][i-k-1][j-1];
}
}
for(read(T);T;T--)
{
read(m),read(n);
C[0]=1;
for(int i=1;i<=m;i++)
C[i]=C[i-1]*(n-i+1)/i;
for(int k=1;k<=m;k++)
{
g[k]=0;
for(int j=1;j<=m;j++)
g[k]+=f[k][m][j]*C[j];
}
ans=0;
for(int k=1;k<=m;k++)
ans+=k*(g[k]-g[k-1])/g[m];
printf("%.6f\n",(double)ans);
}
fclose(stdin);
fclose(stdout);
return 0;
}

  

NOI模拟(3.6)Assignment的更多相关文章

  1. 5.30 NOI 模拟

    $5.30\ NOI $模拟 高三大哥最后一次模拟考了,祝他们好运 \(T1\)装箱游戏 显然可以将四种字母之间的空缺当做状态枚举 那么这道题就很显然了 #include<bits/stdc++ ...

  2. 5.23 NOI 模拟

    $5.23\ NOI $模拟 \(T1\)简单的计算几何题 \(zjr:\)我当时没改,那么自己看题解吧 倒是有个简单的随机化方法(能获得\(72pts,\)正确性未知)\(:\) 随机两条切椭圆的平 ...

  3. 5.6 NOI模拟

    \(5.6\ NOI\)模拟 明天就母亲节了,给家里打了个电话(\(lj\ hsez\)断我电话的电,在宿舍打不了,只能用教练手机打了) 其实我不是很能看到自己的\(future,\)甚至看不到高三的 ...

  4. 5.4 NOI模拟

    \(5.4\ NOI\)模拟 \(T1\) 想到分讨,但是暴力输出一下方案之后有很多特别的情况要讨论,就弃了... 假设\(a\)是原序列,\(b\)是我们得到的序列 设\(i\)是最长公共前缀,\( ...

  5. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  6. NOI 模拟赛 #2

    得分非常惨惨,半个小时写的纯暴力 70 分竟然拿了 rank 1... 如果 OYJason 和 wxjor 在可能会被爆踩吧 嘤 T1 欧拉子图 给一个无向图,如果一个边集的导出子图是一个欧拉回路, ...

  7. 【2018.12.10】NOI模拟赛3

    题目 WZJ题解 大概就是全场就我写不过 $FFT$ 系列吧……自闭 T1 奶一口,下次再写不出这种 $NTT$ 裸题题目我就艹了自己 -_-||| 而且这跟我口胡的自创模拟题 $set1$ 的 $T ...

  8. 6.28 NOI模拟赛 好题 状压dp 随机化

    算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然 ...

  9. NOI模拟赛Day5

    T1 有and,xor,or三种操作,每个人手中一个数,求和左边进行某一种运算的最大值,当t==2时,还需要求最大值的个数. test1 20% n<=1000 O(n^2)暴力 test2 2 ...

随机推荐

  1. JSON WEB TOKEN 从原理到实战

    阅读本文大概需要 4.2 分钟. 作者:王廷骏原文:https://juejin.im/post/5ce272c1e51d45109b01b0f8 1. JSON WEB TOKEN 1.1 什么是J ...

  2. Bryce1010的操作系统课程设计

    https://download.csdn.net/download/fire_to_cheat_/10221003 上面是课程设计的代码,下载需要一些积分. 1.作业调度 2.磁盘调度 常见的磁盘调 ...

  3. C++默认函数与函数重载

    一.默认参数 在C++中,可以为参数指定默认值.在函数调用时没有指定与形参相对应的实参时, 就自动使用默认参数. 默认参数的语法与使用:(1)在函数声明或定义时,直接对参数赋值.这就是默认参数: (2 ...

  4. 题解报告:hdu 2030 汉字统计

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2030 Problem Description 统计给定文本文件中汉字的个数. Input 输入文件首先 ...

  5. 题解报告:hdu 1176 免费馅饼(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小 ...

  6. Matlab调用C程序 分类: Matlab c/c++ 2015-01-06 19:18 464人阅读 评论(0) 收藏

    Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快.但若运算中涉及到大量循环,Matlab的速度令人难以忍受的.当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C ...

  7. C# 基础知识和VS2010的小技巧总汇(2)[转]

    1.使用关键字readonly ,表示这个字段只能在执行构造函数的过程中赋值,或者由初始化语句赋值 2..net4.0新增一个  Tuple 类,代表一个有序的N元组.可以调用Tuple.Create ...

  8. jmeter(十)JMeter 命令行(非GUI)模式

    前文 讲述了JMeter分布式运行脚本,以更好的达到预设的性能测试(并发)场景.同时,在前文的第一章节中也提到了 JMeter 命令行(非GUI)模式,那么此文就继续前文,针对 JMeter 的命令行 ...

  9. Repeater 的使用

    <HeaderTemplate></HeaderTemplate>  头模板——在加载开始执行一遍 <FooterTemplate></FooterTempl ...

  10. 如何成为一名优秀的 iOS 开发工程师

    如果你是一位专业的iOS开发工程师,你应该为自己感到自豪.因为你能在强大的iOS系统下,一展身手实现自己和他人的想法,这是一件令人无比激动的事情. 作为一名iOS开发工程师,你一定想成为行业的佼佼者. ...