HDU 3640 非常複雜模擬題 二分

2022-08-23 17:51:07 字數 1930 閱讀 1937

題目:i, zombie

題意:植物大戰殭屍的模擬題,地圖只有一行,兩種植物,一種會射彈,一種是炸彈,求殭屍勝利的最小個數。

解題思路:

第一感覺是沒感覺,然後覺得好繁雜,各種情況。經過長久琢磨後,思路慢慢清晰,然後ac。覺得還是挺好的一道模擬題。

模擬時主要有三個問題要維護,一是植物的長度,二是最右邊的植物種類,三是殭屍最左的位置。如果殭屍碰到的是炸彈,那麼下一回合可以認為殭屍的最左位置為炸彈的左邊。如果碰到的不是炸彈,則不停向左統計植物個數,直到遇到第乙個炸彈,然後二分可以吃掉這些植物的最少殭屍個數,二分時要根具條件進行模擬。

view code

1 #include 

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include 89

using

namespace std;

1011

const

int max = 100 + 10;

12char plant[max];

13int p, m;

14int flag;

15int e;

16int moznum;

17void init(char plant)

18 29 }

3031

int run(int apnum, int ppnum, int moznum)

32 42

else

43

47if(plife <= 0)

48

54if(mozlife <= 0)

55

59 }

60if(ppnum <= 0 && moznum > 0)

61return

1;62

if(ppnum <= 0 && moznum <= 0)

63return

0;64

if(ppnum > 0)

65return -1;

66 }

67int main()

68 82

else

83 flag = 1;

84while(e >= 0)

85

95else

96 moznum++;

97 m--;

98 e--;

99 flag = 2;

100 }

101else

102

111int left = 1, right = 2 * max, mid;

112while(left < right)

113

120 moznum += left;

121 p -= pnum;

122 e -= pnum + 1;

123 flag = 2;

124 }

125 }

126if(plant[0] == 'm')

127 ++moznum;

128 printf("

case %d: %d\n

", t, moznum);

129 }

130return

0;131 }

HDU 非常可樂 (BFS)

1495 非常可樂 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s...

hdu 1495 非常可樂

題意 給你三個容器讓你平分可樂,求最少的步數。思路 一看到求最少步數,就想到了廣搜,但是沒有思路,但看別人分情況,瞬間就明白啦。可以s n,s m,n s,n m,m s,m n這六種情況討論就行,每種又有倒完和倒不完兩種情況,直到出現兩個容器都有s 2,這就是最少步數。但s是奇數時是不能平分的,三...

hdu 1495 非常可樂

hdu 1495 非常可樂 題目大意 給你三個容器,他們的容量分別是 s,n,m 且s n m,給你s,n,m。s代表裝在容器裡可樂,n和m代表的是兩個杯子的容量,求他們能否平分這杯可樂。如果能就輸出倒的最小次數,如果不能就輸出 no。題目分析 也就是要達到能 s 2,0,s 2或 0 s 2,s ...