小红拿到了一个数组,她准备选择一个子序列,使得该子序列的中位数尽可能大。小红想知道,一共有多少种方案? 奇数长度的子序列中位数为中间的那个数,偶数长度的子序列中位数为中间两个数的平均数。

区块链毕设网qklbishe.com为您提供问题的解答

小红拿到了一个数组,她准备选择一个子序列,使得该子序列的中位数尽可能大。小红想知道,一共有多少种方案?
奇数长度的子序列中位数为中间的那个数,偶数长度的子序列中位数为中间两个数的平均数。

/* 选的最大值个数比其他数至少多一个即可 */ #include <bits/stdc++.h> #define ll long long  using namespace std;  const int N = 1e5 + 10, mod = 1e9 + 7;  int n, maxx; unordered_map<int,int> mp; ll fact[N], infact[N], L[N];  ll ksm(ll x, ll y) {     ll res = 1;     while( y ) {         if(y & 1) res = res * x % mod;         x = x * x % mod;         y >>= 1;     }     return res; }  void init() {     fact[0] = infact[0] = 1;     for(int i=1; i<=n; i++) {         fact[i] = fact[i - 1] * i % mod;         infact[i] = infact[i - 1] * ksm(i, mod - 2) % mod;     } }  ll C(int n, int m) {     return ((fact[n] * infact[m] % mod) * infact[n - m]) % mod; }  int main() {     ios :: sync_with_stdio(false);     cin.tie(0), cout.tie(0);      cin >> n;     init();     for(int i=1; i<=n; i++) {         int t; cin >> t;         maxx = max(maxx, t);         mp[t] ++;     }     int right = mp[maxx], left = n - right;     L[0] = 1;     for(int i=1; i<=left; i++) {         L[i] = (L[i - 1] + C(left, i)) % mod;     }     ll res = 0;     for(int i=1; i<=right; i++) {         (res += C(right, i) * L[i - 1]) %= mod;     }     cout << res;          return 0; } 

31:48

以上就是关于问题小红拿到了一个数组,她准备选择一个子序列,使得该子序列的中位数尽可能大。小红想知道,一共有多少种方案?
奇数长度的子序列中位数为中间的那个数,偶数长度的子序列中位数为中间两个数的平均数。的答案

欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程

区块链NFT链游项目方科学家脚本开发培训

从业7年-专注一级市场


微信:btc9767
TELEGRAM :https://t.me/btcok9

具体资料介绍

web3的一级市场千万收益的逻辑


进群点我



qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 小红拿到了一个数组,她准备选择一个子序列,使得该子序列的中位数尽可能大。小红想知道,一共有多少种方案? 奇数长度的子序列中位数为中间的那个数,偶数长度的子序列中位数为中间两个数的平均数。