【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. STM32 M3内核的位带操作原理及步骤

    STM32 M3内核的位带操作原理及步骤 一.位带操作有什么用?什么是位带操作 位带操作的作用:可以实现对某一GPIO口寄存器(或SRAM内存中)的某一bit位直接写0或1,达到控制GPIO口输出(或 ...

  2. React之父子组件传递和其它一些要点

    react是R系技术栈中最基础同时也是最核心的一环,2年不到获取了62.5k star(截止到目前),足可见其给力程度.下面对一些react日常开发中的注意事项进行罗列. React的组件生命周期 r ...

  3. Linux服务器性能压力测试

    对于新采购的服务器,需要进行有必要的性能测试.这里选择UnixBench工具进行性能测试.记录如下: 1)安装使用下面的脚本使用了最新版UnixBench5.1.3来测试,注释了关于graphic的测 ...

  4. Linux下路由配置梳理

    在日常运维作业中,经常会碰到路由表的操作.下面就linux运维中的路由操作做一梳理:---------------------------------------------------------- ...

  5. Redis常用操作-------List(列表)

    1.BLPOP key [key ...] timeout BLPOP 是列表的阻塞式(blocking)弹出原语. 它是 LPOP 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被  ...

  6. NSCache的简单使用

    简介 1)NSCache 是苹果官方提供的缓存类,用法与 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,使用它来管理缓存. 2)NS ...

  7. Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)-C. Plasticine zebra

    问了学长,感觉还是很迷啊,不过懂了个大概,这个翻转操作,实质不就是在序列后面加上前面部分比如 bw | wwbwwbw  操作过后 wbwbwwbww 而 bw | wwbwwbwbw 这样我们就知道 ...

  8. sixsix团队“餐站”应用代码规范及开发文档

    网络爬虫文档 以下是我们软工小组关于网络爬虫部分代码的的说明文档.至于一些分功能的小函数或方法就不在此赘述,一看就能明白.下面就主要的函数进行说明. 从总体上来说主要有三部分:店家信息爬取部分,菜品信 ...

  9. java注解的简单介绍

    什么是注解 1.注解就是Annontation,Annontation是Java5开始引入的新特征,中文名称叫做注解,它提供了一种安全的类似注释的机制,可以起到减少配置的成果,给程序起到辅助性的作用 ...

  10. java中实现全局变量的功能

    一.通过接口实现 二.通过静态变量  static声明 package test.autorun; import java.util.LinkedList; import java.util.Queu ...