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 ...