1003 逆序对 推公式 组合数学
链接:https://ac.nowcoder.com/acm/problem/14731
来源:牛客网
题目描述
设第i位和第j位分别位ai和aj(i<j),则ai=1,aj=0。
答案对1e9+7取模。
输入描述:
输入一个n。
输出描述:
输出答案对1e9+7取模
备注:
n <= 1018
分析
n 个 位置 ,任取两个位置作为 1 和 0 ,其它位置有2 ^ (n - 3) 所以公式: Cn2 * 2 ^(n-3) = n * (n - 1) * 2 ^ ( n - 3 )
//-------------------------代码----------------------------
#define int ll
const int N = 1e5+10,mod = 1e9 + 7;
int n,m;
int qmi(int a,int b,int p) {
int res = 1;
while(b) {
if(b & 1) res = res * a % p ;
a = a * a % p;
b >>= 1;
}
return res;
}
void solve()
{
cin>>n;
if(n == 0 || n == 1) {
cout<<0;
rt;
} else if(n == 2) {
cout<<1;
rt;
}
int x = qmi(2,n - 3,mod);
cout<<(((n % mod) * ((n - 1) % mod) % mod) * (x % mod) % mod )<<endl;
}
signed main(){
clapping();TLE;
// int t;cin>>t;while(t -- )
solve();
// {solve(); }
return 0;
}
/*样例区
*/
//------------------------------------------------------------