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

题面

BZOJ

洛谷

题解

这题太神仙了。

首先\(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]看电影(组合数学,高精度)的更多相关文章

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

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

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

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

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

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

  4. [ZJOI2011]看电影(MOVIE)

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

  5. Zjoi2011 看电影

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

  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. kubectl客户端工具远程连接k8s集群

    一.概述 一般情况下,在k8smaster节点上集群管理工具kubectl是连接的本地http8080端口和apiserver进行通讯的,当然也可以通过https端口进行通讯前提是要生成证书.所以说k ...

  2. Python基础(dict 和 set) 字典和set

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...

  3. 从github checkout子文件夹

    1.将远程项目加载到指定目录:$git init; $git remote add -f origin url2.使用SparseCheckout模式:$git config core.sparsec ...

  4. Libgdx学习记录28——创建Desktop程序

    1.新建Java Project. 2.添加libs,添加相关的jar文件. 3. 在Project Build Path中,添加Reference. 4. 添加文件夹assets,并右键Build ...

  5. C# 大型电商项目性能优化(一)

    经过几个月的忙碌,我厂最近的电商平台项目终于上线,期间遇到的问题以及解决方案,也可以拿来和大家多做交流了. 我厂的项目大多采用C#.net,使用逐渐发展并流行起来的EF(Entity Framewor ...

  6. mysql 通过慢查询日志查写得慢的sql语句

    MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_t ...

  7. Quartz_配置

    quartz_jobs.xml job 任务 其实就是1.x版本中的<job-detail>,这个节点是用来定义每个具体的任务的,多个任务请创建多个job节点即可 name(必填) 任务名 ...

  8. 深入浅出Automation Anywhere

    Automation Anywhere是基于CLIENT-SERVER架构(control room和客户端),客户端主要是Bot Creator 和 BotRunner 主要构成: 1.WEBCR: ...

  9. linux下syslog-ng日志集中管理服务部署记录

    syslog是Linux系统默认的日志守护进程,默认的syslog配置文件是/etc/syslog.conf文件.syslog守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点 ...

  10. 变量 var &函数new

    声明变量 变量:变量是存储信息的容器,创建变量通常称为"声明"变量 变量必须以字母开头(小驼峰式myName): 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做): 变量名 ...