發糖果問題 二分 貪心

2021-09-24 02:53:27 字數 1376 閱讀 1599

注:與cf上的sweets for everyone!不一樣

幾個關鍵點:

1.剛開始的位置是0。

2.在時間充裕的前提下,如果手上的糖不夠,可以路過h不發糖,去s買了回來再發。

3.但是每個s只能買一次糖。

4.如果時間t內不能給所有鄰居發完糖果,則輸出-1。

5.為了剛開始帶最少的糖果,每經過乙個s一定買糖果。

誤解:剛開始以為不能走回頭路

**如下:

#include

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e5+

100;

int n,t;

char s[maxn]

;bool check

(int num)

//num為當前手中的糖果

else

if(s[i]

=='s'

) st.

pop();

time=i;

}else

// 如果前面的h都已經發完糖果,則遇到s一定買糖果

num++;}

}if(st.

size()

>0)

return false;

//如果糖果不夠,直接返回

if(m==0)

return time<=t;

//如果無需往返,則直接判斷時間

sum[0]

=0;for

(int i =

1;i<=m;i++

) sum[i]

=(r[i]

-l[i])*

2+ sum[i-1]

;//前i段重複兩邊的總時間

int ans=time+sum[m]

;//全程重複兩遍的總時間

for(

int i=

1;i<=m;i++

) ans =

min(ans,time+sum[i-1]

+time-l[i]);

//前i段重複一遍從第i段起重複一遍的總時間

return ans<=t;

}int

main()

printf

("%d\n"

,right);}

return0;

}

貪心 LeetCode135 分發糖果

老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。按照以下要求,幫助老師給這些孩子分發糖果,老師至少需要準備多少顆糖果呢?輸入 1,0,2 輸出 5 解釋 你可以分別給這三個孩子分發 2 1 2 顆糖果。輸入 1,2,2 輸出 4 解釋 你可以分別給這三...

發糖果問題

題目描述 老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。你需要按照以下要求,幫助老師給這些孩子分發糖果 每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那麼這樣下來,老師至少需要準備多少顆糖果呢?示例 1 輸入 1,0,...

二分貪心 21

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