E Packmen 貪心 二分 注意細節

2021-10-07 18:39:55 字數 1851 閱讀 8792

這題雖然想到了貪心+二分,但是模擬細節wa到懷疑人生…

因 為考

慮每個p

有兩種走

法,向左

走再向右

走因為考慮每個p有兩種走法,向左走再向右走

因為考慮每個

p有兩種

走法,向

左走再向

右走 或者向

右走再向

左走

或者向右走再向左走

或者向右走再

向左走

那 麼我

們先考慮

第乙個p

那麼我們先考慮第乙個p

那麼我們先考

慮第乙個

p 這 個p

左邊的所

有∗都被

吃掉,設

走到最左

邊的∗距

離是

l這個p左邊的所有*都被吃掉,設走到最左邊的*距離是l

這個p左邊的

所有∗都

被吃掉,

設走到最

左邊的∗

距離是l然後

右邊也會

有部分∗

被吃掉,

設走到最

右邊的∗

是r

然後右邊也會有部分*被吃掉,設走到最右邊的*是r

然後右邊也會

有部分∗

被吃掉,

設走到最

右邊的∗

是r 所以就

是需要走

min(

l,r)

∗2+m

ax(l

,r

)所以就是需要走min(l,r)*2+max(l,r)

所以就是需要

走min

(l,r

)∗2+

max(

l,r)然後

記錄一下

這個p走

到最右邊

的點

r然後記錄一下這個p走到最右邊的點r

然後記錄一下

這個p走

到最右邊

的點r

下 乙個

p需要把

r到自己

間的∗都

吃掉

下乙個p需要把r到自己間的*都吃掉

下乙個p需要

把r到自

己間的∗

都吃掉

#include using namespace std;

const int maxn=2e5+10;

#define f first

#define s second

typedef pairp;

int n,top,left,in[maxn],sumn;

char a[maxn];

bool isok(int mid)

l=index+1;

for(int j=index+1;j<=n;j++)//現在就盡可能多吃[index+1,n]的*

}if(temp==sumn) return true;

else return false;

}int main()

else if(a[i]=='p') in[++top]=i;

} int l=1,r=n*2,mid,ans;

while(r>=l)

cout<另乙份貪心+二分思路來

源於

思路**於

思路**

於點我呀

#include using namespace std;

int n;

char s[200009];

bool isok(int mid)

cout<}

二分貪心 21

題目大概 有n堆積木,積木高度不同,每個小方塊高度相同。問,最少移動多少小方塊,使得這些積木堆高度相等。思路 先求這些積木的平均數,在把所有的高度與平均數的差值加起來,最後除2,就是最少移動的方塊數。感想 這個題有一點很坑人,最後輸出的時候有乙個小點,不注意看看不到。include include ...

二分貪心 E

題目 輸入n和c,n代表有n間屋子c代表有c頭牛,然後輸入n個數代表這n間房子的座標,牛不喜歡這個布局,一進去就會很暴躁,所以要把牛分的盡可能的遠求最近兩頭牛的最大距離。解題思路 建立乙個陣列存這些房子的座標,然後用sort將這些座標排序,然後令l 0,r a n mid l r 2,先用mid當作...

二分貪心 T

題目 有1 1,2 2,3 3,4 4,5 5,6 6大小的盒子,要把它們裝到6 6的盒子裡,它們的高度都是相同的,用最少的6 6盒子把所有尺寸的盒子都裝起來。解題思路 6 6,5 5以及4 4尺寸的物品每個物品需要占有乙個箱子,3 3的物品乙個箱子可以放4個,2 2的物品箱子可以放9個,1 1的可...