Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const ll MOD = 1e9 + 7;
- const int N = 100005;
- const int K = 55;
- ll a[N], mem[N][K];
- ll comb(ll n, ll k) {
- if (k < 0 || n < 0 || k > n) return 0;
- if (k == 1) return n;
- if (k == 0 || k == n) return 1;
- if (mem[n][k] != -1) return mem[n][k];
- return mem[n][k] = (comb(n - 1, k) + comb(n - 1, k - 1)) % MOD;
- }
- signed main() {
- cin.tie(0)->sync_with_stdio(0);
- memset(mem, -1, sizeof(mem));
- int n, k;
- cin >> n >> k;
- for (int i = 1; i <= n; i++) {
- cin >> a[i];
- }
- sort(a + 1, a + n + 1);
- ll ans = 0, cnt = 0;
- for (int i = 1; i <= n; i++) {
- if (i > 1 && a[i] != a[i - 1]) cnt = 0;
- cnt++;
- if (i < n && a[i] == a[i + 1]) continue;
- for (int j = 1; j <= cnt; j++) {
- ans += ((comb(cnt, j) * comb(i - cnt, k - j)) % MOD * a[i]) % MOD;
- ans %= MOD;
- }
- }
- cout << ans << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement