Codevs 2744 養魚喂妹紙 二分

2021-07-23 14:57:07 字數 1572 閱讀 5833

codevs 2744 養魚喂妹紙

二分有多少個妹紙。

驗證 mid 個妹紙:

遍歷整個國家的城鎮:

如果 第 i 個城鎮的 魚不足以養活 mid 隻妹紙, 那麼我們朝 第 i+1 個城鎮借魚來使第 i 個城鎮恰好能養活 mid 隻妹紙,則第 i+1 個城鎮的魚的數量應該減去 (去 i 城鎮路上所花費的魚 + 第 i 個城鎮恰好能養活 mid 只妹子時 缺的魚的數量) 不用在意是不是減成負數, 因為如果是負數,我們可以認為先從後面 借 魚到 i+1 號城鎮, 答案不變。

如果 第 i 個城鎮的 魚恰好養活 mid 隻妹紙,不做調整。

如果 第 i 個城鎮的 魚養活了 mid 隻妹紙還有剩餘, 那麼我們把剩下的魚全部運到 i+1 個城鎮(正確性證明:如果 i +1 以後的城鎮需要 i 城鎮剩餘的魚, 也是需要先運到 i+1 再往後操作, i 以前的城鎮我們已經處理完畢, 不可能需要 第 i 城鎮剩餘的魚。),那麼 第 i+1 個城鎮所增加的魚的量 就等於 (第 i 個城鎮所剩餘的量 - 從 i 到 i+1 在路上花費量)。

貪心完畢。

**更新啦(11.13)

#include 

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

#define maxn (100100)

int n;

struct towntown[maxn], t[maxn];

bool check(int mid)

return t[n].sum>=mid;

}int main()

cout

<< ans << endl;

return

0;}

處理完成後,遍歷一遍 整個陣列,也可以 只處理最後乙個城鎮(我沒這樣打),獲取能不能養活 mid 個妹紙。

**(10.11):

#include 

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int maxn = 100000 + 10;

int n;

struct rabbit;

rabbit r[maxn], t[maxn];

bool check(ll mid)

if(t[i].sum > mid && i != n)

}for(int i = 1; i <= n; i ++)

if(t[i].sum < mid)

if(h)

return

0; return1;}

int main()

cout

<< l << endl;

return

0;}

CODEVS 2744 養魚喂妹紙

題目描述 description 在某島國,大多數居民都是漁民,這個國家的所有城鎮都沿直線分布在海邊。漁民們捕獲大量的海魚,但就象世界上大多數的漁民一樣,他們並不喜歡吃魚,所以他們決定從 收養一些貧困家庭的女孩紙,讓她們來幫著吃魚,順便 和諧 國家規定每個城鎮收養的貧困妹紙數量必須相等,這樣才能建設...

CODEVS2744 養魚喂妹子 二分 貪心

傳送門 思路 加上能夠養活x個妹子,那麼必定能養活 我們二分能夠養活的最大的妹子數量。對於當前已經符合check函式的mid,ans一定在 mid,r 的區間內,因此採用 mid l r 1 1 if check mid l mid else r mid 1 最終答案為 l 1。關於check函式,...

百練 2744子串

描述 現在有一些由英文本元組成的大小寫敏感的字串,你的任務是找到乙個最長的字串x,使得對於已經給出的字串中的任意乙個y,x或者是y的子串,或者x中的字元反序之後得到的新字串是y的子串。輸入 輸入的第一行是乙個整數t 1 t 10 t表示測試資料的數目。對於每一組測試資料,第一行是乙個整數n 1 n ...