博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF838D Airplane Arrangement
阅读量:4630 次
发布时间:2019-06-09

本文共 1284 字,大约阅读时间需要 4 分钟。

题目描述:(有翻译)

(为什么博客园把我刚写的给吞了……orz)

这题当初看的十分懵逼,不过听了肖大佬的做法还是很清楚的。

因为乘客们可以从双向进入,然后乘客只会看给自己安排的座位和后面的空座位,所以我们不如直接新建一个虚拟座位,把这个序列变成一个环。乘客在找不到真实座位中找不到座位了,自然就会坐到虚拟位置上。因此,如果一个方案中虚拟位置被坐了说明不合法,否则就合法。

虚拟位置与其他位置一样是一个普通的座位,对于m个人来说,其没有被占据的概率为(n+1-m) / (n+1)。而所有的安排数是(2*(n+1)) ^ m,他们的乘积整理出来就是结果,即2^m * (n+1) ^ (m-1) * (n+1-m)

代码很短。(数学题大都难想……不过代码却可能很短)

#include
#include
#include
#include
#include
#define rep(i,a,n) for(int i = a;i <= n;i++)#define per(i,n,a) for(int i = n;i >= a;i--)#define enter putchar('\n')using namespace std;typedef long long ll;const ll mod = 1e9+7;const int M = 300005;ll read(){ ll ans = 0,op = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') op = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { ans *= 10; ans += ch - '0'; ch = getchar(); } return ans * op;}ll n,m;ll qpow(ll a,ll b){ ll q = 1; while(b) { if(b&1) q *= a,q %= mod; a *= a,a %= mod; b >>= 1; } return q;}int main(){ n = read(),m = read(); printf("%lld\n",qpow(2,m) * qpow(n+1,m-1) % mod * (n+1-m) % mod); return 0;}

 

转载于:https://www.cnblogs.com/captain1/p/9434310.html

你可能感兴趣的文章
JS设计模式——3.封装与信息隐藏
查看>>
git-- 使用
查看>>
Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo
查看>>
delphi对窗体的查询(delphi xe2)
查看>>
Ajax跨域:Jsonp原理解析
查看>>
hdu 5099 Comparison of Android versions 枚举题意
查看>>
算法第二章上机实践报告
查看>>
linux--memcache的安装和使用(转)
查看>>
有关于Matlab的regionprops函数的PixelIdxList和PixelList的一点解释
查看>>
Event Loop
查看>>
new做了些什么?
查看>>
BZOJ3835[Poi2014]Supercomputer——斜率优化
查看>>
POJ-1861 Network
查看>>
Java:从字符串文本中获得数字
查看>>
Airbnb的面经复习笔记
查看>>
去面试啦 面试准备
查看>>
细说SSO单点登录
查看>>
hdu 1754
查看>>
51Nod-1276-岛屿的数量
查看>>
WebService 小实例
查看>>