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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

吃鸡蛋-优先队列

發布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 吃鸡蛋-优先队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

小林養了一只母雞,一連 n 天,每天都可以生下若干個雞蛋。在第 i 天,母雞會生下 eggs[i] 個雞蛋,這些雞蛋將會在days[i] 天后(也就是說,第 i + days[i] 天時)腐爛,變得無法食用。也可能有那么幾天,母雞不會生下新的雞蛋,此時用 eggs[i] = 0 且 days[i] = 0 表示。你打算每天最多吃一個雞蛋來保證營養均衡。注意,你可以在這 n 天之后繼續吃雞蛋。給你兩個長度為 n 的整數數組 eggs 和 days ,返回你可以吃掉的雞蛋的最大數目。
輸入格式

第一行一個整數n 第二行輸入n個整數(空格分開),代表每一天母雞下蛋數 第三行輸入n個整數(空格分開),代表每一天雞蛋的保質期

輸出格式

一個整數,你可以吃掉的雞蛋的最大數目。
輸入輸出樣例
輸入 #1

5
1 2 3 5 2
3 2 1 4 2

輸出 #1

7

輸入 #2

6
3 0 0 0 0 2
3 0 0 0 0 2

輸出 #2

5

說明/提示

對于樣例一:

第一天,你吃掉第一天生下的雞蛋。 第二天,你吃掉一個第二天生下的雞蛋。 第三天,你吃掉一個第二天生下的雞蛋。過了這一天,第三天生下的雞蛋就已經腐爛了。 第四天到第七天,你吃的都是第四天生下的雞蛋。

對于樣例二:

第一天到第三天,你吃的都是第一天生下的雞蛋。 第四天和第五天不吃雞蛋。 第六天和第七天,你吃的都是第六天生下的雞蛋。

1 <= n <= 20000 0 <= eggs[i], days[i] <= 20000

解題思路:
利用優先隊列對新加入的雞蛋進行排序(保質期由短到長),模擬每一天的生蛋棄蛋吃蛋過程。
在前n天里有生蛋的加入優先隊列中;檢查優先隊列中過保質期的蛋舍棄掉;再將保質期最短但未過期的蛋吃掉一個。
最后統計得到吃雞蛋數。

代碼如下:

#include <iostream> #include <queue> using namespace std; const int N = 20010; int s[N], t[N];struct EGG {int num;int e;friend bool operator < (const EGG &a, const EGG &b) {return a.e > b.e;} };int ans = 0; int main() {int n;cin >> n;for (int i = 1; i <= n; i++)cin >> s[i];for (int i = 1; i <= n; i++) {cin >> t[i];if (s[i] > t[i])s[i] = t[i];//雞蛋有2個,保質期才1天,那2個雞蛋最多吃一個,所以我們可以認為這天雞蛋只有一個。}priority_queue<EGG>q;for (int i = 1; i <= n || !q.empty(); i++) {if (i <= n)//因為n天后,我們還可以吃雞蛋,所以加這個條件{if (s[i] != 0) {EGG egg;egg.num = s[i];egg.e = i + t[i];//假如今天是第2天,下了一個保質期2天的蛋,那它在第4天腐爛(吃不了),所以為i+t[i]q.push(egg);}}while (!q.empty()) {EGG badegg = q.top();if (badegg.e <= i) //保質期過了,將腐爛的出隊{q.pop();} elsebreak;}if (!q.empty()) {EGG oneegg;oneegg = q.top();oneegg.num--;if (oneegg.num == 0) {q.pop();} // else { // q.pop(); // q.push(oneegg); // }ans++;}}cout << ans << endl;return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的吃鸡蛋-优先队列的全部內容,希望文章能夠幫你解決所遇到的問題。

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