Luogu4936 Agent1

原題鏈接:https://www.luogu.org/problemnew/show/P4936

Agent1

題目背景

2018年11月17日,中國香港將會迎來一場XM大戰,是世界各地的ENLIGHTENEDRESISTANCE開戰的地點,某地 的ENLIGHTENED總部也想派Agent去參加這次的XM大戰,與世界其他地方的ENLIGHTENED並肩作戰。

題目描述

某地的ENLIGHTENED總部總部有NNAgent,每個Agent的能力值互不相同,現在ENLIGHTENED行動指揮想要派出A,BA,B兩隊Agent去參加XM大戰。但是參加大戰的兩個隊伍要滿足兩個要求:

AA隊中能力最大的Agent的能力值要小於BB隊能力最弱的Agent的能力值。
A,BA,B兩隊都要有人蔘戰。
並不一定所有的Agent都要去參加XM大戰的,心急的ENLIGHTENED行動指揮想知道有多少種安排Agent參加大戰的方案。由於答案可能很大,所以只需要你求出答案模(109+7)(10^9+7)的值就可以了。

輸入輸出格式
輸入格式:

輸入僅一行,爲一個整數NN

輸出格式:

輸出答案模(109+7)(10^9+7)的值。

輸入輸出樣例
輸入樣例#1:

3

輸出樣例#1:

5

輸入樣例#2:

6

輸出樣例#2:

129

說明

對於20%20\%的數據 N10N \leq 10

對於40%40\%的數據 N103N \leq 10^3

對於60%60\%的數據 N105N \leq 10^5

對於100%100\%的數據 N109N \leq 10^9

題解

大概是從nn個人裏面先選出22個及以上的人,然後從中間選一個點斷開,我們就把人分成了兩組,式子如下:
i=1n(ni)(i1)=i=1n(ni)ii=1n(ni)=n×2n1(2n1)=(n2)×2n1+1 \begin{aligned} &\sum_{i=1}^n\binom{n}{i}(i-1)\\ =&\sum_{i=1}^n\binom{n}{i}i-\sum_{i=1}^n\binom{n}{i}\\ =&n\times 2^{n-1}-(2^n-1)\\ =&(n-2)\times 2^{n-1}+1 \end{aligned}

然後就變成了快速冪板子題。

代碼
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
int n;
ll power(ll x,ll p){ll r=1;for(;p;p>>=1,x=x*x%mod)if(p&1)r=r*x%mod;return r;}
void in(){scanf("%d",&n);}
void ac(){printf("%lld",((n-2)*power(2,n-1)%mod+1)%mod);}
int main(){in(),ac();}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章