【BZOJ2227】[ZJOI2011]看电影(组合数学,高精度)
【BZOJ2227】[ZJOI2011]看电影(组合数学,高精度)
题面
题解
这题太神仙了。
首先\(K<N\)则必定无解,直接特判解决。
现在只考虑\(K\ge N\)的情况。
现在要求解的是概率,即总合法方案数除以总方案数,总方案数很容易算,显然是\(K^N\)。
考虑如何计算合法方案数。不难发现当且仅当一个人的\(L\)超过了\(K\)时是不合法的。那么我们假装\(1\)和\(N\)收尾相连就好了,这样子如果一个人的\(L\)如果跨越了\(K\),就让他回到\(1\)。不难发现这样子每个人都一定能够坐下。考虑如何计算合法方案数,我们如果在\(K\)的后面再加一个椅子,那么就可以知道\(K\gt N\),那么至少会多出一个空位置,那么我们把某个空位置定为\(K+1\)号位置,不难发现如果\(K+1\)号位置是一个空位置,那么意味着必定没有人会跨越\(K\)位置(因为如果他要跨越\(K\)位置就会坐到\(K+1\)号位置上)
那么,这样子就可以计算合法方案数了。
即\((K+1)^N*(K+1-N)/(K+1)=(K+1)^{N-1}*(K+1-N)\)
也就是首先这些人随意坐,那么空位置还剩下\((K+1-N)\)个,而因为考虑的是环,所以要除掉\(K+1\)消去环的影响。
那么答案只需要高精度计算即可。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct BigNum
{
int s[2000],ws;
void clear(){memset(s,0,sizeof(s));s[ws=1]=0;}
void init(){memset(s,0,sizeof(s));s[ws=1]=1;}
void output(){for(int i=ws;i;--i)printf("%d",s[i]);putchar(' ');}
}A,B;
BigNum operator*(BigNum a,int b)
{
int ws=a.ws;BigNum ret;ret.clear();
for(int i=1;i<=ws;++i)ret.s[i]=a.s[i]*b;
for(int i=1;i<=ws;++i)ret.s[i+1]+=ret.s[i]/10,ret.s[i]%=10;
while(ret.s[ws+1])++ws,ret.s[ws+1]+=ret.s[ws]/10,ret.s[ws]%=10;
ret.ws=ws;return ret;
}
int a[500];
void fj(int x,int opt)
{
for(int i=2;i*i<=x;++i)
while(x%i==0)x/=i,a[i]+=opt;
if(x>1)a[x]+=opt;
}
int main()
{
int T=read();
while(T--)
{
A.init();B.init();
int n=read(),k=read();
if(k<n){puts("0 1");continue;}
memset(a,0,sizeof(a));
fj(k+1,n-1);fj(k+1-n,1);fj(k,-n);
for(int i=1;i<500;++i)
if(a[i]>0)while(a[i]>0)A=A*i,--a[i];
else if(a[i]<0)while(a[i]<0)B=B*i,++a[i];
A.output();B.output();puts("");
}
return 0;
}
【BZOJ2227】[ZJOI2011]看电影(组合数学,高精度)的更多相关文章
- [ZJOI2011]看电影(组合数学,高精度)
[ZJOI2011]看电影 这题模型转化很巧妙.(神仙题) 对于这种题首先肯定知道答案就是合法方案除以总方案. 总方案显然是\(k^n\). 那么考虑怎么算合法方案. 当\(n>k\)的时候显然 ...
- [ZJOI2011]看电影(组合数学/打表+高精)
Description 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特 ...
- BZOJ2227 [Zjoi2011]看电影(movie)
Description \(k\)个座位,\(n\)个人依次过来,每人随机从\(k\)个座位中选择一个,并从它开始不停向后走直到遇到空座位坐下.求所有人都能坐下的概率(即没有人走到第\(k+1\)个位 ...
- [ZJOI2011]看电影(MOVIE)
题目描述 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特殊,具体方式如 ...
- Zjoi2011 看电影
最近在学习一些概率的东西.. 一个随机试验称为 Laplace 试验,当且仅当它满足如下两个条件: (ⅰ) 试验结果 (样本点) 的个数是有限的.(Ω 是有限集) (ⅱ) 任意两个基本事件的概率均相等 ...
- Zjoi2011看电影(movie)
第一步,打表找规律,发现自己的表连3的小样例都过不去,还不如自己手模,自己手跑了5以下的样例,然后发现毫无规律可言…… 第二步,想出一种错误做法,首先n>k必零,人比座都多……然后粘一下图: 基 ...
- 【BZOJ2227】【ZJOI2011】看电影 [组合数][质因数分解]
看电影 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看 ...
- HDU 3496 Watch The Movie(看电影)
HDU 3496 Watch The Movie(看电影) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] New sem ...
- 开始ubuntu 14.04 的装X模式---终端模式下中文输入,听歌,上irc 开启framebuffer看电影 截图
先上图吧 卡卡的全是在tty1 下的操作,看电影,听歌,截图 ,看图 ,上irc 等等,相当适合在小白面前装屁! 需要安装的软件: 为了能正常显示中文:安装fbterm sudo apt-get i ...
随机推荐
- MVC ActionResult派生类关系图
态度决定一切,我要改变的不仅仅是技术,还有对待事情的态度! 先上个图: 由上图可知,ActionResult为根节点,其下有很多子节点!下面简单介绍下: MVC中ActionResult是Action ...
- SDP服务搜索流程源码分析
BREDR的设备 在进行配对完成之后,进行;连接之前都要进行服务的搜索,服务搜索走的流程是SDP,这篇文章就分析一下,bluedroid中SDP的代码流程,我们从配对完成的回调函数开始分析: /*** ...
- 关于node.js的进程管理
如果是单纯的运行一个node进程,那会比较简单,例如: node ./example.js 但是一般来说,当我们运行一个node进程之后,我们可能希望对这个进程进行更多的管理,例如,当node程序是一 ...
- Jenkins自动构建Unity
1.下载安装Jenkins 链接:https://jenkins.io/. 2.安装推荐plugins NOTE:安装失败的话,后面进入管理plugins的高级选项中,将更新站点设置为:http:// ...
- Python-复习-习题-13
复习 dict: dic = {'name':'alex'}增:dic['age'] = 21 存在就覆盖dic.setdefault() 存在什么也不做,没有就增加 删除:pop()按照key删除, ...
- 2016-03-22 OneZero团队 Daily Scrum Meeting
会议时间: 2016-03-22 9:33-9:57am 会议内容: 一.在原有Sprint Backlog基础上,我们加了亮点(摇一摇功能:随机选取一条记录在界面显示,以提醒主页君回忆) 需求分析图 ...
- 个人阅读作业 --软件工程M1/M2总结
软件工程M1/M2总结 写在前面的话: 这学期的软件工程伴着考期的展开逐渐落下帷幕,回顾这学期的软件工程,我感觉我的热情在一次又一次的失落中逐步消耗殆尽,每个人对于这门课的体验都会有所不同吧,可以确定 ...
- 【实践报告】Linux基础实践一
[chmod 命令] chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限. 该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设 ...
- QT QProgressBar QProgressDialog 模态,位置设置,无边框,进度条样式
一 关于模态设置 QProgressDialog可以设置模态(需要在new的时候传入parent),QProgressBar设置不好: 只有dialog可以设置模态,widget不能设置模态(QPr ...
- 剑指offer:复杂链表的复制
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用, ...