題目:i, zombie
題意:植物大戰殭屍的模擬題,地圖只有一行,兩種植物,一種會射彈,一種是炸彈,求殭屍勝利的最小個數。
解題思路:
第一感覺是沒感覺,然後覺得好繁雜,各種情況。經過長久琢磨後,思路慢慢清晰,然後ac。覺得還是挺好的一道模擬題。
模擬時主要有三個問題要維護,一是植物的長度,二是最右邊的植物種類,三是殭屍最左的位置。如果殭屍碰到的是炸彈,那麼下一回合可以認為殭屍的最左位置為炸彈的左邊。如果碰到的不是炸彈,則不停向左統計植物個數,直到遇到第乙個炸彈,然後二分可以吃掉這些植物的最少殭屍個數,二分時要根具條件進行模擬。
view code
1 #include2 #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 ...