题目描述

到了难得的假期,小白班上组织大家去看电影。但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院。但这家电影院分配座位的方式很特殊,具体方式如下:

  1. 电影院的座位共有K个,并被标号为1...K,每个人买完票后会被随机指定一个座位,具体来说是从1...K中等可能的随机选取一个正整数,设其为L。

  2. 如果编号L的座位是空位,则这个座位就分配给此人,否则将L加一,继续前面的步骤。

  3. 如果在第二步中不存在编号L的座位,则该人只能站着看电影,即所谓的站票。

小白班上共有N人(包括小白自己),作为数学爱好者,小白想知道全班都能够有座位的概率是多少。

输入输出格式

输入格式:

输入文件第一行有且只有一个正整数T,表示测试数据的组数。 第2~T+1行,每行两个正整数N,K,用单个空格隔开,其含义同题目描述。

输出格式:

输出文件共包含T行。第i行应包含两个用空格隔开的整数A,B,表示输入文件中的第i组数据的答案为A/B。(注意,这里要求将答案化为既约分数)

输入输出样例

输入样例#1:

3
1 1
2 1
2 2
输出样例#1:

1 1
0 1
3 4
范围
0<=n,k<=200
题解
组合数学加高精度
首先这是一个古典概型,概率等于合法的方案数除以总方案数。总方案数=K^N
合法方案数的计算:在最后面加一个座位,然后所有的座位连成一个环。现在那么总方案数等于(K+1)N
每种环都算了(K+1)次,所以除以(K+1),最后抽调一个空白的座位来构造一个合法的方案,所以要乘(N−K+1)。
ans=(K+1)^(N-1)*(K-N+1)/K^N

高精度用十位一进
 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
long long w=1e9;
long long c[],s1[],s2[],len1,len2;
void chen1(int k)
{int i;
memset(c,,sizeof(c));
for (i=;i<=len1;i++)
{
c[i]+=s1[i]*k;
if (c[i]>=w)
{
c[i+]+=c[i]/w;
c[i]%=w;
}
}
if (c[len1+]) len1++;
while (c[len1]>=w)
{
c[len1+]+=c[len1]/w;
c[len1]%=w;
len1++;
}
for (i=;i<=len1;i++)
{
s1[i]=c[i];
}
}
void chen2(int k)
{int i;
memset(c,,sizeof(c));
for (i=;i<=len2;i++)
{
c[i]+=s2[i]*k;
if (c[i]>=w)
{
c[i+]+=c[i]/w;
c[i]%=w;
}
}
if (c[len2+]) len2++;
while (c[len2]>=w)
{
c[len2+]+=c[len2]/w;
c[len2]%=w;
len2++;
}
for (i=;i<=len2;i++)
{
s2[i]=c[i];
}
}
void epow1(int x,int y)
{int i;
for (i=;i<=y;i++)
chen1(x);
}
void epow2(int x,int y)
{int i;
for (i=;i<=y;i++)
chen2(x);
}
void print1()
{int i,j;
printf("%lld",s1[len1]);
for (i=len1-;i>=;i--)
{int k=;
long long x=s1[i];
while (x)
{k++;
x/=;
}
for (j=;j>k;j--)
printf("");
if (s1[i])
printf("%lld",s1[i]);
}
}
void print2()
{int i,j;
printf("%lld",s2[len2]);
for (i=len2-;i>=;i--)
{int k=;
long long x=s2[i];
while (x)
{k++;
x/=;
}
for (j=;j>k;j--)
printf("");
if (s2[i])
printf("%lld",s2[i]);
}
}
long long gcd(long long a,long long b)
{
if (b==)
{
return a;
}
long long r=gcd(b,a%b);
return r;
}
int main()
{int T,l,i,n,k;
//freopen("ans.out","w",stdout);
cin>>T;
for (l=;l<=T;l++)
{
scanf("%d%d",&n,&k);
if (n>k)
{
cout<<<<' '<<<<endl;
continue;
}
memset(s1,,sizeof(s1));
memset(s2,,sizeof(s2));
s1[]=;
len1=;
long long x=k-n+;
for (i=;i<=n;i++)
{
long long d=gcd(k,x);
x/=d;
chen1(k/d);
}
len2=;
s2[]=;
epow2(k+,n-);
chen2(x);
print2();
cout<<' ';
print1();
cout<<endl;
}
}

[ZJOI2011]看电影(MOVIE)的更多相关文章

  1. 【BZOJ2227】[ZJOI2011]看电影(组合数学,高精度)

    [BZOJ2227][ZJOI2011]看电影(组合数学,高精度) 题面 BZOJ 洛谷 题解 这题太神仙了. 首先\(K<N\)则必定无解,直接特判解决. 现在只考虑\(K\ge N\)的情况 ...

  2. [ZJOI2011]看电影(组合数学,高精度)

    [ZJOI2011]看电影 这题模型转化很巧妙.(神仙题) 对于这种题首先肯定知道答案就是合法方案除以总方案. 总方案显然是\(k^n\). 那么考虑怎么算合法方案. 当\(n>k\)的时候显然 ...

  3. Zjoi2011 看电影

    最近在学习一些概率的东西.. 一个随机试验称为 Laplace 试验,当且仅当它满足如下两个条件: (ⅰ) 试验结果 (样本点) 的个数是有限的.(Ω 是有限集) (ⅱ) 任意两个基本事件的概率均相等 ...

  4. [ZJOI2011]看电影(组合数学/打表+高精)

    Description 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特 ...

  5. BZOJ2227 [Zjoi2011]看电影(movie)

    Description \(k\)个座位,\(n\)个人依次过来,每人随机从\(k\)个座位中选择一个,并从它开始不停向后走直到遇到空座位坐下.求所有人都能坐下的概率(即没有人走到第\(k+1\)个位 ...

  6. Zjoi2011看电影(movie)

    第一步,打表找规律,发现自己的表连3的小样例都过不去,还不如自己手模,自己手跑了5以下的样例,然后发现毫无规律可言…… 第二步,想出一种错误做法,首先n>k必零,人比座都多……然后粘一下图: 基 ...

  7. 【BZOJ2227】【ZJOI2011】看电影 [组合数][质因数分解]

    看电影 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看 ...

  8. HDU 3496 Watch The Movie(看电影)

    HDU 3496 Watch The Movie(看电影) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] New sem ...

  9. 开始ubuntu 14.04 的装X模式---终端模式下中文输入,听歌,上irc 开启framebuffer看电影 截图

    先上图吧 卡卡的全是在tty1 下的操作,看电影,听歌,截图 ,看图  ,上irc 等等,相当适合在小白面前装屁! 需要安装的软件: 为了能正常显示中文:安装fbterm sudo apt-get i ...

随机推荐

  1. 【福大软工】 W班级总成绩排名3

    评分链接: alpha测试    软件产品案例分析 总分排名: 团队千帆竞发图 总结: 本次排名是alpha测试    软件产品案例分析 两次排名的汇总. 1.alpha测试小组评价: 听说:10篇冲 ...

  2. 201621123057 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...

  3. OVS常用命令

    添加brideg: sudo ovs-vsctl add-br br0 删除brideg: sudo ovs-vsctl del-br br0 显示bridge: sudo ovs-vsctl sho ...

  4. 【iOS】Swift LAZY 修饰符和 LAZY 方法

    延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间,如果有一些对象的属性和内容非常复杂的话,这个时间更是不可忽略.另外,有些情况下我们并不会立即用到 ...

  5. kali rolling更新源之gpg和dirmngr问题

    1.编辑 /etc/apt/source.list gedit /etc/apt/sources.list 输入更新源,可以选任何可用更新源,这里设置官方源 deb http://http.kali. ...

  6. 在bootstrap中让竖向排列的输入框水平排列

    在bootstrap中可以使用自带的样式标记来控制样式,但是同时可以利用最原始的css样式来解决达到需求 如下所示可以看出来两个inline-block就可以使得两个水平排列 block和inline ...

  7. jiVMware的网络配置Linux

    需求需要配置VMware的虚拟Linux的ip以达到本地可以访问,而且虚拟机Linux可以上网: 第一方案:选择桥接模式 思路:因为桥接可以,使得虚拟机Linux把本地当做一座桥一样连接到路由器,然后 ...

  8. 【漏洞复现】PHPCMS wap模块 SQL注入(附EXP)

    漏洞影响版本:v9.5.8.v9.6.0 Step1: 访问:http://www.xxx.com/index.php?m=wap&a=index&siteid=1, 获取返回的coo ...

  9. JAVA 中一个非常轻量级只有 200k 左右的 RESTful 路由框架

    ICEREST 是一个非常轻量级只有 200k 左右的 RESTful 路由框架,通过 ICEREST 你可以处理 url 的解析,数据的封装, Json 的输出,和传统的方法融合,请求的参数便是方法 ...

  10. github入门:设置添加ssh key<转>

    GitHub是个分布式的版本控制库.github通过git使用,可以方便的记录代码版本. 通过github可以学习优秀的代码,可以改进提交其他项目中的bug,借助社区力量促进软件优化完善. 国内外大量 ...