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 题目描述: ...
 
随机推荐
- git的一些操作指令
			
1. mkdir learn 创建learn文件夹(也可不用命令创建,直接右击新建即可) cd learn进入learn文件夹 git init 把learn文件夹 变成 可以用git管理的 ...
 - Selenium(Python)驱动Firefox浏览器
			
我的版本是Firefox Setup 52.7.0.exe+geckodriver-v0.15.0-win64.zip, 把驱动geckodriver.exe放到Python安装目录下, 也可以指定驱 ...
 - 第一篇 Flask基础篇之(配置文件,路由系统,模板,请求响应,session&cookie)
			
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
 - Android Test和Logcat
			
一 测试相关概念 是否有源码 黑盒测试: 测试工具 白盒测试: 对所有的源码特别熟悉 对特定的代码进行测试 都是编程 时间 单元测试(程序员) 模块测试 集成测试 系统测试 回归测试(改bug) 压力 ...
 - SqlServer的两种插入方式效率对比
			
protected void button1_Click(object sender, EventArgs e) { DataTable dtSource = new DataTable(); dtS ...
 - LintCode-4.丑数 II
			
丑数 II 设计一个算法,找出只含素因子2,3,5 的第 n 大的数. 符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12... 注意事项 我们可以认为1也是一个丑数 样例 ...
 - 记一次dll强命名冲突事件
			
一 问题的出现 现在要做一个net分布式平台,平台涉及多个服务之间调用问题,最基础的莫过于sso.由于我们的sso采用了wcf一套私有框架实现,另外一个webapi服务通过接口调用sso服务.由于s ...
 - Hadoop出现错误:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable,解决方案
			
安装Hadoop的时候直接用的bin版本,根据教程安装好之后运行的时候发现出现了:WARN util.NativeCodeLoader: Unable to load native-hadoop li ...
 - DEDE去掉会员登录及注册验证码的方法
			
1.登录打开member/index_do.php 删除245-250行,即: if(strtolower($vdcode)!=$svali || $svali=='') { ResetVdValue ...
 - Spring IOC原理简析
			
所谓IoC, 就是一个用XML来定义生成对象的模式. 1.现有三个类,Human是接口,Chinese是一个实现类,American是另一个实现类. 2.获取以上对象采用工厂模式的用法如下: 创建一个 ...