Atcoder Beginner Contest151E(排列组合)

排列组合

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int a[100007];
 5 const long long mod = 1e9+7;
 6 long long inv[100007];
 7 long long qpow(int p,int q){
 8     long long s=1;
 9     for(;q;q>>=1,p=1ll*p*p%mod)
10         if(q&1)
11             s=1ll*s*p%mod;
12     return s;
13 }
14 int main(){
15     ios::sync_with_stdio(false);
16     cin.tie(NULL);
17     cout.tie(NULL);
18     int n,k;
19     cin>>n>>k;
20     for(int i=1;i<=n;++i)
21         cin>>a[i];
22     sort(a+1,a+1+n);
23     for(int i=1;i<=n;++i)
24         inv[i]=qpow(i,mod-2);
25     long long sum=0;
26     long long temp=1;
27     for(int i=k;i<=n;++i){
28         sum=(sum+a[i]*temp%mod)%mod;
29         temp=temp*i%mod;
30         temp=temp*inv[i+1-k]%mod;
31     }
32     temp=1;
33     for(int i=n-k+1;i;--i){
34         sum=(sum+mod-a[i]*temp%mod)%mod;
35         temp=temp*(n-i+1)%mod;
36         temp=temp*inv[n-i+2-k]%mod;
37     }
38     cout<<sum;
39     return 0;
40 }
posted @ 2020-01-14 17:48  sewage  阅读(177)  评论(0编辑  收藏  举报