poj 3258 二分+貪心:一條線段兩個端點之間的距離是l,兩端點之間分布著n個點,這n個點把線段分成了n+1份,現在讓你最多去掉(第一次讀錯題想了很久不知道怎麼做,remove是去掉不是移動,m個點,問n+1份線段最小值的最大值是多少(1≤l≤109,0≤m≤n≤50000)。
分析類似poj 3273,也是用二分法來做
接下來的問題就是給定乙個k,如何判斷是否能夠通過至多去掉m個點使得剩下線段的最小值大於等於k.
也是採用貪心的做法,從左到右掃瞄,遇見小於k的線段就把該線段右端去掉累加到下一段中繼續比較。證明略。
需要注意的是最後一段需要單獨處理。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int a[500005];
int len;
int n,m;
int maxa;//儲存陣列a中的最大值
bool check(int k)//判斷k是否滿足要求
else
}if(sum+len-a[n]l)
cout<=1;i--)a[i]=a[i]-a[i-1];
work();
}return 0;
}
POJ 3258青蛙過河 二分答案
description 有一條寬度為l 1 l 1,000,000 的河。河中間有n 0 n 20000 塊石頭,青蛙從河西岸經過這n個石塊後,順利跳到了河的東岸。設河中間每個石塊距離西岸的距離為di 其中di大於0小於l 注意 di是距離起始河岸的距離。小明閒著沒事,想移掉河中間的m 0 m n ...
poj 3258 二分最小值最大
題意 有一些石頭排成一條線,第乙個和最後乙個不能去掉。其餘的共可以去掉m塊,要使去掉後石頭間距的最小值最大。解析 二分石頭,最小值最大。include include include include include include include include include include in...
poj3258 二分及一些思考
題意 牛要到河對岸,在與河岸垂直的一條線上,河中有n塊石頭,給定河岸寬度l,以及每一塊石頭離牛所在河岸的距離,現在去掉m塊石頭,要求去掉m塊石頭後,剩下的石頭之間以及石頭與河岸的最小距離的最大值。用二分做,但是開始寫了三個版本的二分,全都wa。無賴看了別人的二分,還是不理解,為什麼他們寫的就能過。反...