题目

传送门 to luogu

题目概要
nnn 个座位、mmm 个人,每个人依次选择一个心仪座位与方向,找到该方向上与心仪座位最近的空座位并坐下。如果有人没有座位,他就会愤怒地吃掉 sysysy 的网盘!

为了全世界男人的福音,请你保护 sysysy 的网盘——求出有多少种情况能够保全非物质文化遗产。两种情况不同,当且仅当某个人的心仪座位发生了改变,或者更换了方向。

数据范围与提示
1≤m≤n≤1061\le m\le n\le 10^61≤m≤n≤106 。

∗\color{red}^{*}∗尝试

我™直接不会做,于是选择打表。大概输出了这样一个东西,剩下的没啥参考价值了——不难发现,答案已经超过 int\tt intint 范围了。行号为 nnn ,列号为 mmm ,均从 111 开始。

2
4 12
6 32 128
8 60 400 2000
10 96 864 6912 41472
12 140 1568 16464 153664 1075648
14 192 2560 32768 393216 4194304 33554432
16 252 3888 58320 839808 11337408 136048896 1224440064
18 320 5600 96000 1600000 25600000 384000000 825032704

用 g(n,m)g(n,m)g(n,m) 表示方案数,容易看出 g(n,1)=2ng(n,1)=2ng(n,1)=2n 与 g(n,2)=4n2−4g(n,2)=4n^2-4g(n,2)=4n2−4 。于是我大胆猜想,是一个 mmm 次的关于 nnn 的多项式。说干就干,打了一个高斯消元,又找到
g(n,3)=8n3−24n−16g(n,4)=16n4−96n2−128n−48g(n,5)=32n5−320n3−640n2−480n−128g(n,3)=8n^3-24n-16\\ g(n,4)=16n^4-96n^2-128n-48\\ g(n,5)=32n^5-320n^3-640n^2-480n-128 g(n,3)=8n3−24n−16g(n,4)=16n4−96n2−128n−48g(n,5)=32n5−320n3−640n2−480n−128

看看这些系数,发现它们是 2m2^m2m 的倍数。故而除掉,再看一次完整版。
{g(n,1)2=n1+0g(n,2)4=n2+0n−1g(n,3)8=n3+0n2−3n1−2g(n,4)16=n4+0n3−6n2−8n1−3g(n,5)32=n5+0n4−10n3−20n2−15n1−4\begin{cases} {g(n,1)\over 2}=n^1+0\\ {g(n,2)\over 4}=n^2+0n-1\\ {g(n,3)\over 8}=n^3+0n^2-3n^1-2\\ {g(n,4)\over 16}=n^4+0n^3-6n^2-8n^1-3\\ {g(n,5)\over 32}=n^5+0n^4-10n^3-20n^2-15n^1-4 \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​2g(n,1)​=n1+04g(n,2)​=n2+0n−18g(n,3)​=n3+0n2−3n1−216g(n,4)​=n4+0n3−6n2−8n1−332g(n,5)​=n5+0n4−10n3−20n2−15n1−4​

你是否注意到了,表格中的数据不足以让我求出 g(n,5)g(n,5)g(n,5) 呢?事实上,我发现 g(m−1,m)=0g(m-1,m)=0g(m−1,m)=0 ,所以我就用这个点补齐了 g(n,5)g(n,5)g(n,5) 所需的 666 个点。为什么有这个零点呢?瞪眼法得到的。就是我不想打暴力程序了,所以我想用用更小的n\sout{\;n\;}n值。

然后我又想,根据因式定理,我们知道最高项系数,只需要知道它的所有根即可确定多项式。所以我试着将这个特殊的根去掉。
{g(n,1)2n=1g(n,2)4(n−1)=n+1g(n,3)8(n−2)=n2+2n+1g(n,4)16(n−3)=n3+3n2+3n+1g(n,5)32(n−4)=n4+4n3+6n2+4n+1\begin{cases} {g(n,1)\over 2n}=1\\ {g(n,2)\over 4(n-1)}=n+1\\ {g(n,3)\over 8(n-2)}=n^2+2n+1\\ {g(n,4)\over 16(n-3)}=n^3+3n^2+3n+1\\ {g(n,5)\over 32(n-4)}=n^4+4n^3+6n^2+4n+1 \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​2ng(n,1)​=14(n−1)g(n,2)​=n+18(n−2)g(n,3)​=n2+2n+116(n−3)g(n,4)​=n3+3n2+3n+132(n−4)g(n,5)​=n4+4n3+6n2+4n+1​

握了棵草!这还真他母亲的可以!右边显然是 (n+1)m−1(n+1)^{m-1}(n+1)m−1 啊!


以下是正文。

不难发现 如下规律:
g(n,m)=(n+1)m−1⋅(n−m+1)⋅2mg(n,m)=(n+1)^{m-1}\cdot(n-m+1)\cdot 2^m g(n,m)=(n+1)m−1⋅(n−m+1)⋅2m

思路

真正合理的做法请看这里。

将座位连接成一个环,并且加入 死亡座位 n+1n+1n+1(在环上就会在 111 和 nnn 之间)。问题转化为,不能让 n+1n+1n+1 号座位被使用(在此种情形下,可以认为所有人都找到了座位)。

任意选,情况数是 [2(n+1)]m\big[2(n+1)\big]^m[2(n+1)]m 。多少种情况下 n+1n+1n+1 号座位没被使用呢?考虑一个座位没有被使用的 概率(本质就是方案数除以总方案数嘛)。每个座位是 等价的(这也是为什么前面的乱选方案数允许 n+1n+1n+1 号座位作为心仪座位——否则座位是不等价的),所以概率就是 1−mn+11-\frac{m}{n+1}1−n+1m​ 嘛。所以总方案数
g(n,m)=2m⋅(n+1)m⋅(1−mn+1)g(n,m)=2^m\cdot (n+1)^m\cdot\left(1-\frac{m}{n+1}\right) g(n,m)=2m⋅(n+1)m⋅(1−n+1m​)

牢骚语:何人何等脑洞,敢于用此妙计?为啥要接链成环啊?为啥啊?为啥啊?

代码

暴力模拟的代码我给删掉了……这里就贴一份高斯消元的代码吧。

#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
inline int readint(){int a = 0; char c = getchar(), f = 1;for(; c<'0'||c>'9'; c=getchar())if(c == '-') f = -f;for(; '0'<=c&&c<='9'; c=getchar())a = (a<<3)+(a<<1)+(c^48);return a*f;
}const int MaxN = 105;
double a[MaxN][MaxN]; int n;
void gauss(){//  printf("a =\n");
//  for(int i=0; i<n; ++i,puts(""))
//      for(int j=0; j<=n; ++j)
//          printf("%.0f ",a[i][j]);for(int i=0; i<n; ++i){int row = -1;for(int j=i; j<n; ++j){if(a[j][i] < 0) // flipfor(int k=i; k<=n; ++k)a[j][k] = -a[j][k];if(row == -1 ||a[j][i] > a[row][i])row = j;}swap(a[row],a[i]);for(int j=0; j<n; ++j) if(j != i)for(int k=n; k>=i; --k)a[j][k] -= a[i][k]*a[j][i]/a[i][i];}
//  printf("a_ =\n");
//  for(int i=0; i<n; ++i,puts(""))
//      for(int j=0; j<=n; ++j)
//          printf("%.6f ",a[i][j]);for(int i=0; i<n; ++i)printf("%.6f\n",a[i][n]/a[i][i]);
}
int totSy;
void insert(int x,int y){double t = 1;for(int i=n-1; ~i; --i)a[totSy][i] = t, t *= x;a[totSy ++][n] = y; // result
}int main(){n = 6;insert(4,0);insert(5,41472);insert(6,153664);insert(7,393216);insert(8,839808);insert(9,1600000);gauss();return 0;
}

[CF838D]Airplane Arrangements相关推荐

  1. Codeforces.838D.Airplane Arrangements(思路)

    题目链接 \(Description\) 飞机上有n个位置.有m个乘客入座,每个人会从前门(1)或后门(n)先走到其票上写的位置.若该位置没人,则在这坐下:若该位置有人,则按原方向向前走直到找到空座坐 ...

  2. 【原创】CGAL中,2D Arrangements学习笔记

    2D Arrangement类型简介: 给定一组平面曲线,2D Arrangement能够将这组曲线所组成的图形细分成顶点.边和面这些最基本的几何单位.其中给定的曲线能够相互相交,甚至能自相交.其组成 ...

  3. Terrafugia希望在今年夏天带来真正可飞的Airplane

    Terrafugia希望在今年夏天带来真正可飞的Airplane 大家都知道,Terrafugia的汽车+飞机混合机种,他是是辆双座的汽车,拥有100-500英里的速度范围,一个独立的无铅汽油储备箱, ...

  4. (Modern Family S01E03) Part 5  PhilJay   Phil到Jay家和Jay玩toy airplane

    Part 5 Phil&Jay  Phil到Jay家和Jay玩toy airplane 我跟杰真是铁哥们儿  真的               Jay and I are buds, for ...

  5. AirPlane Race Creator竞速游戏完整项目自定义模型操作说明基于Urp管线

    最近一段时间,脑子被门夹了,伤心病狂地去搞引擎去了,之后会回归理性,重新做一些Unity插件的入门讲解 今天讲解的是,完整项目:AirPlane Racer - URP 特别适合某些人学习: 策划 - ...

  6. MM 维护配额安排 MEQ1 Quota Arrangements (配额协议)

    Purpose 关于配额分配   通过指定每一货源的配额,配额分配将一段期间内的物料总需求分配给某一供货源.该配额指定了总需求中的哪一部分应从指定的货源处采购. 如果存在物料的配额分配,则在货源确认处 ...

  7. Latch-Learned Arrangements of Three Patch Codes (1)

    Latch:Learned Arrangements of Three Patch Codes 1 简介 该算法是二值化特征描述方法的一个优化变种,一般的二值化特征描述主要通过计算特征点窗口内n个点对 ...

  8. 2019-05-10 Business Meeting-Making Arrangements

    I need you to arrange a meeting this afternoon. I'd like you to make the necessary arrangements for ...

  9. SPOJ 130 - Rent your airplane and make money(dp+优化)

    题意:有n列预定航班,从st时刻开始出发,飞行时间为d,花费为p,且同一时刻不能有两个航班,求最大的花费 对航班的开始时间(或结束时间)按升序排序,从后往前找到对应结束时间所在的航班位置(如按结束时间 ...

  10. [75] Making arrangements

    1. Asking about availability     More formal expressions:         Would it be possible to meet?      ...

最新文章

  1. oracle tuning 工具
  2. 从Gmail故障看SaaS的服务风险
  3. spring 动态代理_分析动态代理给 Spring 事务埋下的坑
  4. python没有这个xlwt模块_python xlwt模块简介
  5. 【C语言】C语言里++能随便用吗?
  6. 下标要求数组或指针类型_算法一看就懂之「 数组与链表 」
  7. SpringBoot项目启动时控制台乱码,怎么办?
  8. NodeMCU(ESP8266)使用UDP控制8x8点阵显示
  9. 小型网站项目完整部署流程(Windows操作系统)
  10. 增量数据挖掘论文推荐
  11. 测试打分用什么软件,测名软件哪个比较好
  12. unity-单例模式
  13. MATLAB基本使用方法
  14. ISDEV : error -6003的解决办法
  15. Openshift入门:基本概念解析
  16. 多项式拟合(polyfit)及局部加权回归(Lowess)对二维数据基础规律和离群特征学习的分析对比
  17. amd k14主板参数_amd k14主板能换cpu吗?
  18. Redhat linux常用命令(全)
  19. Kotlin重载操作符和约定声明规则
  20. 免费学习 SwiftUI

热门文章

  1. Google Chrome v90.0.4430.212 正式版下载
  2. (保姆级教程)免费将pdf转化为word文档,不限页数
  3. 解读全部二十三种设计模式(附测试代码)
  4. 小程序根据国外经纬度显示地图
  5. 普陀寺里的穿白T恤的奥特曼 2012年9月8日
  6. python交易是什么意思_py交易什么梗?起源及流行原因
  7. java程序的结构与类型实验报告_20172301 《Java软件结构与数据结构》实验三报告...
  8. Linux查看开机自动运行的服务
  9. TimeLine学习笔记
  10. 10、返回当前审批流程图、后续审批按钮