[ZJOI2011]看电影

这题模型转化很巧妙.(神仙题)

对于这种题首先肯定知道答案就是合法方案除以总方案.

总方案显然是\(k^n\).

那么考虑怎么算合法方案.

当\(n>k\)的时候显然答案为0.

否则,我们不妨虚构出来一个从最后一个座位到第一个座位传送门,如果一个人他走到最后一个座位还没有空位置的话,他本来应该要是站着的,但是现在有了传送门,他就可以走到第一个座位,再一路走看看有没有空座位,找个位置坐下,由于这样构成了一个环,座位的个数一定是够坐的.这样每个人都有座位了.

我们现在要求的就是没有人穿过传送门的方案总数.考虑上面这样处理不好算.不妨再虚构一个座位,它的编号为\(k+1\),现在如果有人走到n没有座位,就会先坐在\(n+1\),那么一个不合法方案当且仅当\(k+1\)位置被人坐了,一个合法方案当且仅当\(k+1\)位置没有人坐.

这样的圆排列一共有\(\frac{(k+1)^n}{k+1}=(k+1)^{n-1}\)(n个人,每个人可以选择\(k+1\)个座位中的一个坐下,有人就按照规则往后坐就可以了,反正可以坐下),只有\(k-n+1\)个位置是空的,我们可以选择从这些位置断环成链,并把这些位置当做\(k+1\)号座位.

于是答案就是

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

数据范围这么小是因为要高精...

处理gcd的时候注意\(k+1\)和\(k\)是没有公因子的,只要考虑\(k-n+1\)和\(k^n\)的gcd.

只要高精乘法,快速幂一下就可以了.

#include<bits/stdc++.h>
#define maxn 505
#define ll long long
using namespace std;
struct num
{
int a[5005],len;
void init(ll x)
{
memset(a,0,sizeof(a));len=0;
while(x)a[++len]=x%10,x/=10;
}
num operator * (num x)
{
num res;res.init(0);
for(int i=1;i<=len;i++)
{
int carry=0;
for(int j=1,t;j<=x.len;j++)
{
t=res.a[i+j-1];
res.a[i+j-1]=(a[i]*x.a[j]+carry+res.a[i+j-1])%10;
carry=(a[i]*x.a[j]+carry+t)/10;
}
res.a[i+x.len]=carry;
}
res.len=len+x.len;
while(res.len>0&&!res.a[res.len])res.len--;
return res;
}
void print(){for(int i=len;i>=1;i--)printf("%d",a[i]);printf(" ");}
}ans,K,N;
ll gcd(ll a,ll b){if(b==0)return a;return gcd(b,a%b);}
num ksm(num A,int k)
{
num res;res.init(1);
while(k)
{
if(k&1)res=res*A;
A=A*A;k>>=1;
}
return res;
}
int main()
{
int T;cin>>T;
while(T--)
{
int n,k,m;ll g=1,t;scanf("%d%d",&n,&k);m=n;t=1;
if(n>k){printf("0 1\n");continue;}
while(m>0&&g<gcd(t*k,k-n+1)&&t*k>0)g=gcd(k-n+1,t*k),m--,t=t*k;
N.init((k-n+1)/g);K.init(k+1);ans=ksm(K,n-1);ans=ans*N;ans.print();
K.init(k);N.init(t/g);ans=ksm(K,m);ans=ans*N;ans.print();printf("\n");
}
return 0;
}

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

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

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

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

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

  3. [ZJOI2011]看电影(MOVIE)

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

  4. Zjoi2011 看电影

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

  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. http://www.jianshu.com/p/2dd54ec0bb43 程序员纪录片

    http://www.jianshu.com/p/2dd54ec0bb43 程序员纪录片

  2. 个人永久性免费-Excel催化剂功能第85波-灵活便捷的批量发送短信功能(使用腾讯云接口)

    微信时代的今天,短信一样不可缺席,大系统都有集成短信接口.若只是临时用一下,若能够直接在Excel上加工好内容就可以直接发送,这些假设在此篇批量群发短信功能中都为大家带来完美答案. 业务场景 不多说, ...

  3. [PTA] 1001. 害死人不偿命的(3n+1)猜想 (Basic)

    import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Sc ...

  4. [leetcode] #239 Sliding Window Maximum (Hard)

    原题链接 题意: 给定一个数组数字,有一个大小为k的滑动窗口,它从数组的最左边移动到最右边.你只能在窗口看到k个数字.每次滑动窗口向右移动一个位置. 记录每一次窗口内的最大值,返回记录的值. 思路: ...

  5. redis的下载与安装(linux版)

    redis的下载与安装(linux版) 1.下载路径 https://redis.io/download 2.上传到linux并且解压 3.进入解压之后的redis,并且make && ...

  6. ==和equals的区别,85%的求职者“理直气壮”地回答错误

    应该会有不少初学的小伙伴上来就说:==比较的是地址值,equals比较的是值.这样回答对吗? 下面详细说下两者的区别. ==运算符 对于基本数据类型来说,比较的是数值 对于引用数据类型来说,比较的是地 ...

  7. 为 Editor.md 编辑器插件增加预览和发布按钮

    前言 一直在使用 Editor.md 插件作为博客的编辑器,用着挺好,但是在全屏下编辑时,每次想预览或者保存又必须切换到非全屏状态下才可以点击按钮,用着不舒服,所以花了一点时间在工具栏上增加了预览.保 ...

  8. nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现

    nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现 一.漏洞描述 这个漏洞其实和代码执行没有太大的关系,主要原因是错误地解析了请求的URL,错误地获取到用户请求的文件名,导致出现权限绕过.代 ...

  9. 提升10倍生产力:IDEA远程一键部署SpringBoot到Docker

    作者:陶章好 juejin.im/post/5d026212f265da1b8608828b 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容 ...

  10. vim中 E212:无法打开并写入文件的解决办法

    很简单,就是用管理员身份打开这个文件 不要被网上的一些乱七八糟的迷惑了 sudo vim ....... 解决了问题请点个赞,谢谢