来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld小a终于放假了,它想在假期中去一些地方游玩,现在有N个景点,编号为1, 2, \dots N1,2,…N,同时小b也想出去游玩。由于一些特殊♂原因,他们的旅行计划必须满足一些条件 首先,他们可以从这N个景点中任意选几个游玩 设小a选出的景点集合为A,小b选的景点集合为B,则需要满足
A,B的交集不能为空集A,B不能相互包含(A=B也属于相互包含) 注意:在这里我们认为(A,B)是无序的,即(A,B)和(B,A)是同一种方案输入描述: 一个整数N表示景点的数量 输出描述: 一个整数表示方案数,答案对108 + 7取模 示例1 输入
3输出
3说明 合法的方案如下: 小a:(1, 2) 小b: (2, 3) 小a:(1, 3) 小b: (2, 3) 小a:(1, 2) 小b: (1, 3) 示例2 输入 复制
4输出 复制
30示例3 输入 复制
2输出 复制
0示例4 输入 复制
10000输出 复制
68735934示例5 输入
1输出
0备注: 对于100%的数据1⩽n⩽10 13
解题思路来自 我们整合一下题目的条件可以得到,A和B都至少有两个元素,且最少有一个相同,至少有一个不同 一共n的元素,我们可以先选出A的元素,然后在A中选一些元素作为公共元素,然后在A未选的元素中选择给B 可以得到公式 我们注意到公式中存在除法操作,且我们需要mod,所以用逆元来算 求逆元的方法: