\(luoguP3330\) [ZJOI2011] 看电影

废了老命想题解

$$luogu$$

$$HZOI$$

题意

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

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

如果编号 \(L\) 的座位是空位,则这个座位就分配给此人,否则将 \(L\) 加一,继续前面的步骤;如果不存在编号 \(L\) 的座位,则该人只能站着看电影,即所谓的站票。

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

提示

对于 \(100 \%\) 的数据,\(1 \leq T \leq 50\),\(1 \leq N,K \leq 200\)。

本题输出的数据可能较大。

样例输入

3
1 1
2 1
2 2

样例输出

1 1
0 1
3 4

题解

假解 ( 正解往下看 )

其实刚开始我没注意样例,并天真的以为每一种不同的选择方式是因为最后的得数不同。

然后得到了一个 nb 的式子 :

\[\frac{C^n_k}{C^n_k+n-1}
\]

并打了一个高精 \(GCD\) 总计 \(270\) 多行,并自信的测了一发样例——

\(\color{red}{WA}\) 了。

重新考虑了一下,模拟了第三组样例:

选取方式如下:( 在第 \(i\) 个位置的数表示坐在第 \(k_i\) 个位置上 , 标红则表示其不合法)

\(1 , 1\) || \(1 , 2\) || \(2 , 1\) || \(\color{red}{2,2}\)

所以 \(P(3) = \frac{3}{4}。\)

现在来考虑正解。

正解

如果 \(n > k\) 直接输出 0 1 注:一定要是这个,输出 0 k^n abcdef \(G\) ┏┛墓┗┓...(((m-__-)m))

现在考虑总选数,显然为 \(k^n\) .

每个人有 \(k\) 种选法, \(n\) 个人,乘法原理得到答案。

考虑合法解。

那我们考虑什么情况下他不合法,就是说你的这个位置往后(包括这个位置)全是有人的。

我们开 \(k + 1\) 个椅子并排成一个环,每个人坐下形成合法的的数目 (注意: \(\bf{不考虑编号}\) )

这个不考虑编号的意思是:

若 \(3\) 个椅子两个人坐,则:

\[(1,2) , (2,3) , (3,1)
\]

均属于同一种情况。

显然答案为

\[(k + 1)^{ n - 1 }
\]

那你现在已经坐好后,我们考虑空的位置。

对于我们现在给到的所有排列肯定都会有满足的情况吧 ( 显然 )

那么在每一个空着的座位,将他之前的一个位置看为 \(n\) (尾) , 将他之后的一位看做 \(1\) 则意味着不会有人坐不下了 (因为末尾之后是空的啊)

我们再考虑对于一种排列方法来说,现在 \(n\) 个人坐着,显然有 \(k + 1 - n\) 个空着的位置。

所以每一种排列的合法方案数为 $k - 1 + n $ , 所以总合法方案数为 \((k + 1 - n) ^ { n - 1 } \times ( k - n + 1 )\)

所以最后答案为:

\[\frac{(k + 1 - n) ^ { n - 1 } \times ( k - n + 1 )}{k^n}
\]

考虑代码实现

我们很显然得到 \((k + 1) ^ {n - 1}\) 与 \(k^n\) 是互素的那我们约分时只考虑 $ k + 1 - n $ 与 \(k^n\) 就可以了。

我们用高精模求出 $k^n \bmod ( k + 1 - n ) $ 求出此数与 \(k + 1 - n\) 的 \(GCD\) ,上下约掉即可

\(code\)

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std ;
const int N = 1e6 + 10 ;
const int binary = 1e9 ;
int gcd(int a, int b) {
if (b == 0)
return a ; return gcd(b, a % b) ;
}
int lena, lenb ;
int T, n, K ;
int a[N], b[N] ;
int beta[N], lenbeta ;
inline void print(int alpha[], int len1) {
cout << alpha[len1] ; for (int i = len1 - 1 ; i >= 1 ; -- i) {
printf("%09lld", alpha[i]) ;
}
}
inline void High_Precision_times(int alpha[], int &len1, int k) {
int j ;
int carry = 0 ; for (j = 1 ; j <= len1 || carry ; ++ j) {
alpha[j] = alpha[j] * k + carry ;
carry = alpha[j] / binary ;
alpha[j] %= binary ;
} while (alpha[j] == 0 && j > 1)
j -- ; len1 = j ;
}
inline void High_Precision_div(int alpha[], int &len1, int k) {
int carry = 0 ; for (int j = len1 ; j >= 1 ; -- j) {
int div = carry * binary + alpha[j] ;
carry = div % k ;
alpha[j] = div / k ;
} while (alpha[len1] == 0 && len1 > 1)
len1 -- ;
}
inline int read() {
int x = 0, f = 1 ;
char c = getchar() ; while (c < '0' || c > '9') {
c = getchar() ;
} while (c >= '0' && c <= '9') {
x = x * 10 + c - '0' ;
c = getchar() ;
} return x * f ;
}
signed main() {
#ifndef ONLINE_JUDGE
freopen("1.in", "r", stdin) ;
freopen("1.out", "w", stdout) ;
#endif
T = read() ; while (T --) {
n = read() ;
K = read() ;
memset(a, 0, sizeof(a)) ;
memset(b, 0, sizeof(b)) ; for (int i = 1 ; i <= lenbeta ; ++ i)
beta[i] = 0 ; lenbeta = 0 ;
lena = lenb = 1 ;
a[1] = 1 ;
b[1] = 1 ; for (int i = 1 ; i <= n - 1 ; ++ i)
High_Precision_times(a, lena, K + 1) ; for (int i = 1 ; i <= n ; ++ i)
High_Precision_times(b, lenb, K) ; for (int i = 1 ; i <= lenb ; ++ i)
beta[i] = b[i] ; lenbeta = lenb ;
High_Precision_times(a, lena, K - n + 1) ; if (n > K) {
cout << 0 << ' ' ;
cout << 1 ;
cout << '\n' ;
continue ;
} int j ;
int bemod = K - n + 1, carry = 0 ; for (j = lenb ; j >= 1 ; -- j) {
int div = carry * binary + beta[j] ;
carry = div % bemod ;
beta[j] = div / bemod ;
} int d = gcd(carry, K - n + 1) ;
High_Precision_div(a, lena, d) ;
High_Precision_div(b, lenb, d) ;
print(a, lena) ;
cout << ' ' ;
print(b, lenb) ;
cout << '\n' ;
}
}

luoguP3330 [ZJOI2011] 看电影--组合数学--高精度的更多相关文章

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

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

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

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

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

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

  4. [ZJOI2011]看电影(MOVIE)

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

  5. Zjoi2011 看电影

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

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

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

  7. Zjoi2011看电影(movie)

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

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

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

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

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

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

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

随机推荐

  1. 3568F-Docker容器部署方法说明

                 

  2. virtualbox ubuntu拓展存储空间

    1. 关闭虚拟机,右键点击virtualbox图标,选择打开文件位置,记录下路径: 2. 找到需要拓容的ubuntu虚拟机的.vdi文件,记录下路径: 3. windows命令行转到virtualbo ...

  3. FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt

    ​<FFmpeg开发实战:从零基础到短视频上线>一书的"10.2  FFmpeg推流和拉流"提到直播行业存在RTSP和RTMP两种常见的流媒体协议.除此以外,还有比较两 ...

  4. B+树要点梳理

    B+树重要操作 中间节点 中间节点的key,与其对应的指针的原则是,小于key的元素在其指针指向的节点中 中间节点的key可以看成是右斜着排放的,即小于等于key的节点由key对应的指针指定,最有一个 ...

  5. 存储器与CPU的连接

    存储器与CPU连接分主要看前五步 1.首先根据给出的地址范围写出二进制码 2.确定芯片的类型和数量 3.确定地址线 4.确定片选信号 要注意MREQ是低电平有效,要连到138译码器的低电平

  6. xampp+vscode 安装PHP断点调试xdebug

    官网下载地址:https://xdebug.org/download.php 这里需要特别注意,有TS(thread safe)和NTS 区别,我建议不要下载最新的,我一开始使用最新的发现插件没有匹配 ...

  7. mysql 临时表的好处

    客户端新建了一个会话,这个会话只是服务器与客户端1对1的关系,客户端可能在服务端建立一个临时表,满足客户端处理某些事务的需求,当客户端退出会话后,这个临时表自动drop,没有任何数据信息占用数据库空间 ...

  8. 题解 CF741E Arpa’s abnormal DNA and Mehrdad’s deep interest

    CF741E Arpa's abnormal DNA and Mehrdad's deep interest 记 \(R_{i}\) 表示把 \(T\) 插入在 \(S\) 的第 \(i\) 位后组成 ...

  9. RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐

    RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB.Dify.FastGPT.RagFlow.Anything-LLM,以及更多推荐 1.MaxKB MaxKB = Max Kn ...

  10. RPA处理京东滑块拼图验证码

    在进行京东商家后台企业账号的RPA自动化操作过程中,登录环节是必不可少的步骤.然而,这一过程中有时会遇到一种特殊的验证机制--滑块拼图验证码,它的突然出现如同一道屏障,阻碍了自动化的顺利进行.因为只有 ...