日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Messages 贪心,期望,概率,模拟(2000)

發布時間:2025/3/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Messages 贪心,期望,概率,模拟(2000) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


題意 :

  • 有n個學生,給出老師希望每個學生讀的一條消息mim_imi?和每個學生最多能讀多少條消息kik_iki?,如果老師發生的消息大于kik_iki?,學生讀到任意一條消息的概率是ki消息總數\frac{k_i}{消息總數}ki??
  • 現在希望每個學生讀到希望被讀的那條的消息的期望和最大,求構造發送消息是哪些

思路 :

  • 我們考慮新增一本書的影響,設原本期望是E,已經挑了n本書,有t個人要看這第n+1本書,而且他們看到這本書的概率和是P=∑kn+1\frac {\sum{k}}{n+1}n+1k?,因為每個人的期望是P*1,所以他們看到這本書的期望和也是P
  • 那么這本書對原期望的影響是E=nE+Pn+1\frac{nE+P}{n+1}n+1nE+P?
  • 因此,P必須比E大,于是可以貪心,讓∑k\sum{k}k大的書先選,然后枚舉答案j,每個人的k=min(k, j)
  • 可以發現答案很小,因k<=20,然后j>20必然會讓答案減小,因此,可以直接模擬
#include <iostream> #include <iomanip> #include <vector> #include <numeric> #define pb push_backusing namespace std; using ll = long long;const int N = 2e5 + 10;int main() {cin.tie(nullptr) -> sync_with_stdio(false);cout << fixed << setprecision(20);int n;cin >> n;vector<int> m(n + 1), k(n + 1);int mxK = 0;for (int i = 1; i <= n; i ++ ) cin >> m[i] >> k[i], mxK = max(mxK, k[i]);vector<int> p(N);for (int i = 1; i < N; i ++ ) p[i] = i;vector<int> ans;double res = 0.0; // 最優期望for (int i = 1; i <= mxK; i ++ ){vector<double> cnt(N, 0.0);for (int j = 1; j <= n; j ++ ){if (k[j] >= i) cnt[m[j]] += 1.0;else cnt[m[j]] += (double)k[j] / i; // 當前決定一共選i本書,m[j]這本書被看到的期望為sum{k} / i}// 期望值從大到小sort(p.begin() + 1, p.end(), [&](int a, int b){return cnt[a] > cnt[b];});double tmp = 0.0; // 選i本書的期望for (int j = 1; j <= i; j ++ ) tmp += cnt[p[j]];if (tmp > res){res = tmp;ans.clear();for (int j = 1; j <= i; j ++ ) ans.pb(p[j]);}}cout << (int)ans.size() << endl;for (auto i : ans)cout << i << " \n"[i == ans.back()];return 0; }

總結

以上是生活随笔為你收集整理的Messages 贪心,期望,概率,模拟(2000)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。