注释: ( a + b ) n = ∑ i = 0 n a i b n − i C n i \small (a+b)^n=\large\sum\limits_{i=0}^{n}\small a^ib^{n-i}C_n^i (a+b)n=i=0∑naibn−iCni,本章用到 { a = 1 b = 1 \small\begin{cases} \ a=1\\ \ b=1\\ \end{cases} {
a=1b=1与 { a = 2 b = 1 \small\begin{cases} \ a=2\\ \ b=1\\ \end{cases} {
a=2b=1与 { a = 1 b = 2 \small\begin{cases} \ a=1\\ \ b=2\\ \end{cases} {
a=1b=2的特殊情况
解决思路:由题意不难看出集合 A , B \small A,B A,B的个数都不能为 1 \small 1 1或 n \small n n ( 1 , n \small (1,n (1,n的时候肯定相互包含 ) \small ) ) 直接枚举加推导就好 考虑 A \small A A,先从 n \small n n个景点挑出 i \small i i个,即: ∑ i = 2 n − 1 C n i \large\sum\limits_{i=2}^{n-1}\small C_n^i i=2∑n−1Cni 再来考虑 B \small B B,为了满足条件,只要 B \small B B在 A \small A A中挑出大于等于 1 \small 1 1个景点,并且在 A \small A A的补集中挑出大于等于 1 \small 1 1个景点即可。 注意: B \small B B不能把 A \small A A中所有的元素挑出,不然会包含的。 B \small B B在 A \small A A中: ∑ j = 1 i − 1 C i j \large\sum\limits_{j=1}^{i-1}\small C_i^{j} j=1∑i−1Cij B \small B B在 A \small A A的补集中: ∑ k = 1 n − i C n − i k \large\sum\limits_{k=1}^{n-i}\small C_{n-i}^{k} k=1∑n−iCn−ik 推导 ∴ ∑ i = 2 n − 1 C n i ∑ j = 1 i − 1 C i j ∑ k = 1 n − i C n − i k \small\therefore\large\sum\limits_{i=2}^{n-1}\small C_n^i\large\sum\limits_{j=1}^{i-1}\small C_i^{j}\large\sum\limits_{k=1}^{n-i}\small C_{n-i}^{k} ∴i=2∑n−1Cnij=1∑i−1Cijk=1∑n−iCn−ik = ∑ i = 2 n − 1 C n i ∑ j = 1 i − 1 C i j ( ∑ k = 0 n − i C n − i k − C n − i 0 ) \small=\large\sum\limits_{i=2}^{n-1}\small C_n^i\large\sum\limits_{j=1}^{i-1}\small C_i^{j}\small(\large\sum\limits_{k=0}^{n-i}\small C_{n-i}^{k}-C_{n-i}^0) =i=2∑n−1Cnij=1∑i−1Cij(k=0∑n−iCn−ik−Cn−i0) = ∑ i = 2 n − 1 C n i ∑ j = 1 i − 1 C i j ( 2 n − i − 1 ) \small=\large\sum\limits_{i=2}^{n-1}\small C_n^i\large\sum\limits_{j=1}^{i-1}\small C_i^{j}\small(2^{n-i}-1) =i=2∑n−1Cnij=1∑i−1Cij(2n−i−1) = ∑ i = 2 n − 1 C n i ( ∑ j = 0 i C i j − C i 0 − C i i ) ( 2 n − i − 1 ) \small=\large\sum\limits_{i=2}^{n-1}\small C_n^i\small(\large\sum\limits_{j=0}^{i}\small C_i^{j}-C_i^0-C_i^i)\small(2^{n-i}-1) =i=2∑n−1Cni(j=0∑iCij−Ci0−Cii)(2n−i−1) = ∑ i = 2 n − 1 C n i ( 2 i − 2 ) ( 2 n − i − 1 ) \small=\large\sum\limits_{i=2}^{n-1}\small C_n^i\small(2^i-2)\small(2^{n-i}-1) =i=2∑n−1Cni(2i−2)(2n−i−1) = ∑ i = 2 n − 1 C n i ( 2 n − 2 i − 2 × 2 n − i + 2 ) \small=\large\sum\limits_{i=2}^{n-1}\small C_n^i\small(2^n-2^i-2\times2^{n-i}+2) =i=2∑n−1Cni(2n−2i−2×2n−i+2) = ∑ i = 2 n − 1 C n i ( 2 n + 2 − 2 i − 2 × 2 n − i ) \small=\large\sum\limits_{i=2}^{n-1}\small C_n^i\small(2^n+2-2^i-2\times2^{n-i}) =i=2∑n−1Cni(2n+2−2i−2×2n−i) = ( 2 n + 2 ) ∑ i = 2 n − 1 C n i − ∑ i = 2 n − 1 2 i C n i − 2 ∑ i = 2 n − 1 2 n − i C n i \small=\small(2^n+2)\large\sum\limits_{i=2}^{n-1}\small C_n^i-\large\sum\limits_{i=2}^{n-1}\small2^i\small C_n^i-2\large\sum\limits_{i=2}^{n-1}\small2^{n-i}\small C_n^i =(2n+2)i=2∑n−1Cni−i=2∑n−12iCni−2i=2∑n−12n−iCni = ( 2 n + 2 ) ( ∑ i = 0 n C n i − C n 0 − C n 1 − C n n ) − ( ∑ i = 0 n 2 i C n i − 2 0 C n 0 − 2 1 C n 1 − 2 n C n n ) − 2 ( ∑ i = 0 n 2 n − i C n i − 2 n C n 0 − 2 n − 1 C n 1 − 2 0 C n n ) \small=\small(2^n+2)(\large\sum\limits_{i=0}^{n}\small C_n^i-C_n^0-C_n^1-C_n^n)-(\large\sum\limits_{i=0}^{n}\small2^i\small C_n^i-2^0C_n^0-2^1C_n^1-2^nC_n^n)-2(\large\sum\limits_{i=0}^{n}\small2^{n-i}\small C_n^i-2^nC_n^0-2^{n-1}C_n^1-2^0C_n^n) =(2n+2)(i=0∑nCni−Cn0−Cn1−Cnn)−(i=0∑n2iCni−20Cn0−21Cn1−2nCnn)−2(i=0∑n2n−iCni−2nCn0−2n−1Cn1−20Cnn) = ( 2 n + 2 ) ( 2 n − n − 2 ) − ( 3 n − 1 − 2 n − 2 n ) − 2 ( 3 n − 2 n − n 2 n − 1 − 1 ) \small=\small(2^n+2)(2^n-n-2)-(3^n-1-2n-2^n)-2(3^n-2^n-n2^{n-1}-1) =(2n+2)(2n−n−2)−(3n−1−2n−2n)−2(3n−2n−n2n−1−1) = 4 n − 1 − 3 × 3 n + 3 × 2 n \small=\small4^n-1-3\times3^n+3\times 2^n =4n−1−3×3n+3×2n 由于 ( A , B ) , ( B , A ) \small (A,B),(B,A) (A,B),(B,A)是同一种方案 ∴ a n s = 4 n − 1 − 3 × 3 n + 3 × 2 n 2 \small \therefore ans\small=\large\frac{4^n-1-3\times3^n+3\times 2^n}{2} ∴ans=24n−1−3×3n+3×2n a n s = 4 n − 1 − 3 × 3 n 2 + 3 × 2 n − 1 \small ~~~~ans=\large\frac{4^n-1-3\times3^n}{2}\small+3\times2^{n-1} ans=24n−1−3×3n+3×2n−1 分母直接快速幂求解逆元就好
AC代码
//优化#pragma GCC optimize(2)//C#include<string.h>#include<stdio.h>#include<stdlib.h>#include<math.h>//C++#include<unordered_map>#include<algorithm>#include<iostream>#include<istream>#include<iomanip>#include<climits>#include<cstdio>#include<string>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>//宏定义#define N 1010#define DoIdo main//#define scanf scanf_s#define it set<ll>::iterator#define TT template<class T>//定义+命名空间typedeflonglong ll;typedefunsignedlonglong ull;const ll mod =1e8+7;const ll INF =1e18;constint maxn =1e6+10;usingnamespace std;//全局变量//函数区
ll max(ll a, ll b){
return a > b ? a : b;}
ll min(ll a, ll b){
return a < b ? a : b;}
ll quick_pow(ll a, ll b){
ll res =1; a %= mod;while(b){
if(b &1){
res =(res * a)% mod;}
a =(a * a)% mod;
b >>=1;}return res;}//主函数intDoIdo(){
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
ll n;
cin >> n;
ll ans2 =(3*quick_pow(2, n -1))% mod;
ll ans1 =((quick_pow(4, n)-1-quick_pow(3, n +1))% mod + mod)*quick_pow(2, mod -2);
cout <<(ans1 + ans2)% mod;return0;}//分割线---------------------------------QWQ/*
*/