天天看點

Codeforces Round #697 (Div. 3)E - Advertising Agency

#include<bits/stdc++.h>
using namespace std;
int fen[1010],fac[1010];
const int f=1e9+7;
#define ll long long
bool cmp(int a , int b)
{
  return a>b;
}
ll qpow(ll a,ll b)
{
  ll ans=1; 
  while(b)
  {
    if(b % 2)
    {
      ans = ans * a % f;
    } 
    a = a * a % f; 
    b /= 2;
  }
  return ans % f;
}
ll C(ll n , ll m){    
  ll ans1= 1 , ans2 = 1 , ans3 = 1 ;
  for(ll i = 1 ; i <= n ; i++)
    ans1 = ans1 * i % f ;
  for(ll i = 1 ; i <= m ; i++)
    ans2 = ans2 * i % f ;
  for(ll i = 1 ; i <= n - m ; i++)
    ans3 = ans3 * i % f ;
  return ans1 * qpow(ans2 , f - 2) % f * qpow(ans3 , f - 2 ) % f ;
}

int main()
{
  
  int t;
  scanf("%d",&t);
  while(t--)
  {
    memset(fen,0,sizeof(fen));
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i = 1 ; i <= n ; i++)
    {
      scanf("%d", &fen[i]);
    }
    sort( fen + 1 ,fen + 1 + n , cmp);
    int flag = fen[k];
    ll sum1 = 0 , sum2 = 0;
    for( int i = 1 ; i <= n ; i++)
    {
      if(fen[i] == flag && i <= k)
      {
        sum1++;
      }
      else if(fen[i] == flag && i > k)
      {
        sum2++;
      }
    }
    ll a = C(sum1 + sum2 , sum1 );
    printf("%lld\n",a);
  }
}