題目描述 description
在某島國,大多數居民都是漁民,這個國家的所有城鎮都沿直線分布在海邊。漁民們捕獲大量的海魚,但就象世界上大多數的漁民一樣,他們並不喜歡吃魚,所以他們決定從**收養一些貧困家庭的女孩紙,讓她們來幫著吃魚,順便(和諧),國家規定每個城鎮收養的貧困妹紙數量必須相等,這樣才能建設和諧社會。
一條又長又直的公路貫穿整個海岸將所有的城鎮連線了起來,所以每個城鎮(除去第乙個和最後乙個)都直接和相鄰的兩個城鎮相連線。乙個妹紙一年要吃掉一噸魚(但是依然可以保持苗條),每個城鎮捕獲的魚既可以在本地吃也可以運往其它城市吃,在運輸過程中,每公里要上貢一噸魚作為過路費。
已知每個城鎮一年的捕魚產量,並假設運輸方案是最佳的,計算最多能收奍多少個妹紙。
輸入描述 input description
輸入檔案第一行包含乙個整數n,其中1≤n≤100,000,表示城鎮總數。
接下來的n行每行包含兩個整數a和b,其中1≤a≤1,000,000,000,0≤b≤1,000,000,000,分別表示城鎮的位置(座標)和該城鎮的捕魚產量,所有城鎮按其位置從小到大排序給出,注意問題一定存在正整數解。
輸出描述 output description
輸出檔案僅一行包含乙個整數表示每個城鎮最多能夠收養的妹紙數量。
資料範圍及提示 data size & hint
1≤a≤1,000,000,000,0≤b≤1,000,000,000,1≤n≤100,000
這個題難就難在對判斷函式的處理。
對於每乙個mid值,我們用貪心的策略,如果當前城市i-1的魚產量少於i,就從i運魚到i-1,反之亦然,但是我一開始忽略了一些細節,導致我近半個小時一直wa六個點,
就是:
「如果從城市i-1到城市i的魚』產量差』小於』座標差』,就不參與運魚,運了以後答案只會更差,說明當前解肯定不是最優解。」
因為是求最多收養的妹子數量,所以ans和l取max
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int maxn=100000+500;
ll pos[maxn];
ll pro[maxn];
ll tmp[maxn];
int n;
bool flag;
void hah(int i,ll x)
else
if(tmp[i-1]>x)
}bool can(ll x)
// printf("%lld\n",tmp[n]);
if(tmp[n]return
false;
else
return
true;
}ll div()
else
if(flag)
// printf("l:%lld r:%lld\n",l,r);
}return ans;
}int main()
printf("%lld",div());
return
0;}
Codevs 2744 養魚喂妹紙 二分
codevs 2744 養魚喂妹紙 二分有多少個妹紙。驗證 mid 個妹紙 遍歷整個國家的城鎮 如果 第 i 個城鎮的 魚不足以養活 mid 隻妹紙,那麼我們朝 第 i 1 個城鎮借魚來使第 i 個城鎮恰好能養活 mid 隻妹紙,則第 i 1 個城鎮的魚的數量應該減去 去 i 城鎮路上所花費的魚 第...
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 ...