这是一道比较简单的组合数学题
首先我们这么想 在n个位置选出两个位置来按放 1 0 为 (nn-1)/2
其他位置随便放 结果为 2^n-2
最终结果为 (2^n-2)((n*n-1)/2) 然后在计算中取模
仔细想一想这样是将所有情况全部都计算了(想不明白建议手推一下
#include <bits/stdc++.h> #define ll long long using namespace std; ll const mod=1e9+7; ll quickpow(ll a, ll b) {///模板 if (b < 0) return 0; ll ret = 1; a %= mod; while(b) { if (b & 1) ret = (ret * a) % mod; b >>= 1; a = (a * a) % mod; } return ret; } ll n,k; int main() { scanf("%lld",&n); k=(((((n%mod)*((n-1)%mod))/2)%mod)*quickpow(2,n-2))%mod;///取模 printf("%lld",k); return 0; }