nowcoder OI 周赛 最后的晚餐(dinner) 解题报告
最后的晚餐(dinner)
链接:
https://www.nowcoder.com/acm/contest/219/B
来源:牛客网
题目描述
\(\tt{**YZ}\)(已被和谐)的食堂实在是太挤辣!所以\(\tt{Apojacsleam}\)现在想邀请他的一些好友去校外吃一顿饭,并在某酒店包下了一桌饭。
当\(\tt{Apojacsleam}\)和他的同学们来到酒店之后,他才发现了这些同学们其实是\(N\)对\(cp\),由于要保护广大单身狗的弱小心灵(\(FF\)!),所以他不想让任意一对情侣相邻。
说明:
- 酒店的桌子是恰好有\(2N\)个位置的圆桌。
- 客人恰好是\(N\)对\(cp\),也就是说,圆桌上没有空位。
- 桌子的每一个位置是一样的,也就是说,如果两种方案可以通过旋转得到,那么这就可以视为相等的。
- 现在,你需要求出,将任意一对情侣不相邻的方案数。
说明
对于\(20\%\)的数据,\(1\le N\le 5\)
对于\(30\%\)的数据,\(1\le N\le20\)
对于\(50\%\)的数据,\(1\le N\le100\)
对于\(70\%\)的数据,\(1\le N\le 200000\)
对于\(100\%\)的数据,\(1\le N\le 30000000\)
思路:容斥原理
\(f_i\)代表至少\(i\)对情侣坐相邻的方案数。
首先考虑一个小问题,\(n\)个人围成一个可以旋转的环的方案数。
可以固定第一个人,方案数就是\((n-1)!\)
那么\(f_i=fac_{2n-i-1}\times 2^i \times \binom{n}{i}\)
分别代表,捆绑法以后的方案数,情侣内部的方案数和选择情侣的可能性。
答案就是\(\sum_{i=0}^nf_i(-1)^i\)
常数写的不好。。说起来标程写的好厉害,我都没看懂。。
Code:
#include <cstdio>
#define ll long long
const ll mod=1e9+7;
const ll Inv=500000004;
const int N=3e7+10;
ll quickpow(ll d,ll k)
{
ll f=1;
while(k)
{
if(k&1) f=f*d%mod;
d=d*d%mod;
k>>=1;
}
return f;
}
ll fac,tfac=1,ans=0,inv[N],po=1;
int n;
int main()
{
scanf("%d",&n);
if(n==1) return puts("0"),0;
for(ll i=1;i<=n;i++) tfac=tfac*i%mod,po=po*2%mod;
fac=tfac*quickpow(n,mod-2)%mod;
inv[n]=quickpow(tfac,mod-2);
for(ll i=n-1;~i;i--) inv[i]=inv[i+1]*(i+1)%mod;
for(ll i=n;~i;i--)
{
(ans+=fac*inv[i]%mod*inv[n-i]%mod*po%mod*(i&1?-1:1))%=mod;
fac=fac*(2*n-i)%mod;
po=po*Inv%mod;
}
ans=(ans+mod)%mod;
ans=ans*tfac%mod;
printf("%lld\n",ans);
return 0;
}
2018.10.28
nowcoder OI 周赛 最后的晚餐(dinner) 解题报告的更多相关文章
- Nowcoder 练习赛 23 D Where are you 解题报告
Where are you 链接: https://ac.nowcoder.com/acm/contest/272/D 来源:牛客网 题目描述 小\(p\)和他的朋友约定好去游乐场游玩,但是他们到了游 ...
- Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告
写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...
- 牛客OI周赛4-提高组 B 最后的晚餐(dinner)
最后的晚餐(dinner) 思路: 容斥 求 ∑(-1)^i * C(n, i) * 2^i * (2n-i-1)! 这道题卡常数 #pragma GCC optimize(2) #pragma GC ...
- nowcoder(牛客网)OI测试赛2 解题报告
qwq听说是一场普及组难度的比赛,所以我就兴高采烈地过来了qwq 然后发现题目确实不难qwq.....但是因为蒟蒻我太蒻了,考的还是很差啦qwq orz那些AK的dalao们qwq 赛后闲来无事,弄一 ...
- 牛客OI周赛8-提高组A-用水填坑
牛客OI周赛8-提高组A-用水填坑 题目 链接: https://ac.nowcoder.com/acm/contest/403/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制: ...
- 牛客OI周赛9-提高组题目记录
牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\ ...
- 2018.8.30 nowcoder oi赛制测试1
2018.8.30 nowcoder oi赛制测试1 普及组难度,发现了一些问题 A 题目大意:求斐波那契数列\(f(k-1)f(k+1)-f(k)^2\),范围极大 打表可得规律 其实是卡西尼恒等式 ...
- [NOIP2013 花匠] 新人解题报告
本来按照老师的要求,我学OI的第一份解题报告应是在寒假完成的关于数据结构的基础题,但由于身体原因当时未能完成,那么就在省选赛前临时写几篇吧…… 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿 ...
- 【九度OJ】题目1445:How Many Tables 解题报告
[九度OJ]题目1445:How Many Tables 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1445 题目描述: ...
随机推荐
- uvaoj 489 - Hangman Judge(逻辑+写代码能力)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 配置vConsole调试console
1.使用 npm 安装: npm install vconsole 再使用webpack,然后js代码中 import VConsole from 'vconsole/dist/vconsole.mi ...
- 2018牛客多校第二场a题
一个人可以走一步或者跳x步,但不能连着跳,问到这个区间里有几种走法 考虑两种状态 对于这一点,我可以走过来,前面是怎么样的我不用管,也可以跳过来但是,跳过来必须保证前一步是走的 dp[i][0]表示 ...
- Android开发-API指南-<activity>
<activity> 英文原文:http://developer.android.com/guide/topics/manifest/activity-element.html 采集(更新 ...
- [Clr via C#读书笔记]Cp13接口
Cp13接口 类和接口继承 接口只提供签名,不提供实现:等效于契约:凡事能使用具名接口的地方都能够使用实现了的接口. 定义接口 定义很简单,FCL也提供了大量的现成接口供使用: 继承接口 类不能多继承 ...
- Python最长连续数列的O(n)解法
题目 输入一个乱序的连续数列,输出其中最长连续数列长度,要求算法复杂度为 O(n) . 输入样例 100,4,200,1,3,2 54,55,300,12 1 5,4,3,2,1 1,2,3,4,5, ...
- geth账户密码
xiaocong geth账户密码 123 {d6abe909013d8da914ae2a08c9b58e7b76601b39} 账户密码 123456 0x4A7F15104F54dB3214D2F ...
- CDH问题集
1.在CM中添加主机报JDK错误 手动在机器上安装oracle-jdk1.7+update64.然后在CM中选择不安装oracle-jdk即可. 2.HostMoinitor无法与server联系 查 ...
- JS原型与面向对象总结
ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但 是,ECMAScrip ...
- 第四课——MFC应用程序框架
一.MFC应用程序类型 上篇文章的彩蛋:可通过使用MFC应用程序向导(MFC AppWizard)的功能来创建所需要的应用程序,这意味着不需要输入任何代码.MFC除了应用程序向导,还对应用程序项目有着 ...