签到题(组合数学)

签到题(组合数学)

传送门

看错题意,以为是 n n 位数。应该是长度为 n n 的数组.恰好 n 1 n-1 个不同的数的方案数.

所以肯定有两个数相同。

首先选出这两个数的位置 C n 2 C_n^2 ,再选出这个数是几 C n 1 = n C_n^1=n

再对剩下 n 1 n-1 个数中选出 n 2 n-2 个数 C n 1 n 2 = n 1 C_{n-1}^{n-2}=n-1

再进行全排列 ( n 2 ) ! (n-2)!

综上 a n s = C n 2 × n ! ans=C_n^2\times n!

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
ll fac[N];
int main(){
    ll n;
    fac[0]=1;
    for(int i=1;i<=1e5;i++) fac[i]=fac[i-1]*i%mod;
    while(cin>>n){
       cout<<n*(n-1)/2*fac[n]%mod<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/106888931
今日推荐