费马小定理求组合数
inline ll qpow(ll a , ll b , ll modd){
ll ans = 1 ;
while(b){
if(b & 1) ans = ans * a % modd ;
a = a * a % modd ;
b >>= 1 ;
}
return ans ;
}
inline ll C(ll n , ll m){
if(n==m)
{
return 0ll;
}
ll ans1 = 1 , ans2 = 1 , ans3 = 1 ;
for(ll i = 1 ; i <= n ; i++)
ans1 = ans1 * i % mod ;
for(ll i = 1 ; i <= m ; i++)
ans2 = ans2 * i % mod ;
for(ll i = 1 ; i <= n - m ; i++)
ans3 = ans3 * i % mod ;
return ans1 * qpow(ans2 , mod - 2 , mod) % mod * qpow(ans3 , mod - 2 , mod) % mod ;
}
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define YES cout<<"YES"<<endl
#define NO cout<<"NO"<<endl
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1e9+7;
const int INF=0x3f3f3f3f;
const int N = 1e3+10;
int a[N];int cnt[N];int cnt1[N];
#define ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
inline ll qpow(ll a , ll b , ll modd){
ll ans = 1 ;
while(b){
if(b & 1) ans = ans * a % modd ;
a = a * a % modd ;
b >>= 1 ;
}
return ans ;
}
inline ll C(ll n , ll m){
if(n==m)
{
return 0ll;
}
ll ans1 = 1 , ans2 = 1 , ans3 = 1 ;
for(ll i = 1 ; i <= n ; i++)
ans1 = ans1 * i % mod ;
for(ll i = 1 ; i <= m ; i++)
ans2 = ans2 * i % mod ;
for(ll i = 1 ; i <= n - m ; i++)
ans3 = ans3 * i % mod ;
return ans1 * qpow(ans2 , mod - 2 , mod) % mod * qpow(ans3 , mod - 2 , mod) % mod ;
}
void solve()
{
int n,k;
cin>>n>>k;
memset(cnt,0,sizeof cnt);
memset(cnt1,0,sizeof cnt1);
for(int i=1;i<=n;i++)
{
cin>>a[i];
cnt[a[i]]++;
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
if(n-i<k)
{
cnt1[a[i]]++;
}
}
map<int,int>mp;
int ans=0;int f=0;
for(int i=1;i<=n;i++)
{
if(n-i<k&&!mp[a[i]])
{
f=max(f,C(cnt[a[i]],cnt1[a[i]]));
ans+=C(cnt[a[i]],cnt1[a[i]]);
mp[a[i]]++;
}
}
if(f==0)
ans++;
cout<<ans<<endl;
}
signed main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
}