原题链接:
https://vjudge.net/problem/CodeForces-1475E
AC代码:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef long long ll;
const int64_t mod = 1e9 + 7;
const int maxn = 1e6 + 5;
const int INF = 0x3f3f3f3f;
int a[1005];
int d[1005];
int c[1005][1005];
int cmp(int a, int b) {
return a > b;
}
void init() {
for (int i = 0; i < 1005; i++) {
for (int j = 0; j <= i; j++) {
if (!j) c[i][j] = 1;
else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
}
}
}
int main() {
init();
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
memset(a, 0, sizeof(a));
memset(d, 0, sizeof(d));
for (int i = 0; i < n; i++) {
cin >> a[i];
d[a[i]]++;
}
sort(a, a + n, cmp);
int m = 1;
for (int i = k - 1; i > 0; i--) {
if (a[i] == a[i - 1]) {
m++;
} else break;
}
int nn = d[a[k - 1]];
cout << c[nn][m] << endl;
}
return 0;
}
得用递归求组合数,用循环乘会wa5