HDU 1495 非常可樂

2021-07-24 10:34:24 字數 1631 閱讀 7296

b - cola

time limit:1000ms     memory limit:32768kb     64bit io format:%i64d & %i64u

submit

status

practice

hdu 1495

description

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s (s<101)毫公升 (正好裝滿一瓶) ,它們三個之間可以相互倒可樂 (都是沒有刻度的,且 s==n+m,101>s>0,n>0,m>0) 。聰明的acmer你們說他們能平分嗎?如果能請輸出倒可樂的最少的次數,如果不能輸出"no"。

input

三個整數 : s 可樂的體積 , n 和 m是兩個杯子的容量,以"0 0 0"結束。

output

如果能平分的話請輸出最少要倒的次數,否則輸出"no"。

sample input

7 4 3

4 1 3

0 0 0

sample outputno3

這道題想了好久也沒想出來 最好看了別人的題解才發現原來是題目理解錯誤了

我以為程式設計者要腦補喝可樂的計算 也就是一定要在1和2兩個瓶子裡分出相同的可樂 若是有個瓶子的可樂超出限度了 就得喝掉再倒

然後怎麼也想不出到底如何做

原來是三個瓶子任意只要有兩個瓶子分出了可樂就足夠了啊。。。

這道題 就是遍歷思想,列舉思想

不斷地把可樂從三個瓶子之間倒替,直到倒替成功了 就是任意兩個瓶子中有相同的可樂==s/2的時候,就倒替成功了

所以這個問題還是需要去搜尋

我們分析 由於不知道刻度 所以在倒可樂的時候只能要麼把對方瓶子倒滿 要麼就把自己的瓶子倒空,為什麼呢?

總之一定要實現把可樂倒出去。

所以遍歷六種情況

1 s-1

2 s-2

3 1-s

4 1-2

5 2-s

6 2-1

用廣搜分別對六種情況進行層序遍歷 選出最小的滿足條件的狀態 break 要是廣搜不出這個狀態就輸出no

#include#includeusing namespace std;

struct sit

bool book[101][101][101];

int main()

for(int i=1;i<=6;i++)

else if(y>a.nows)

}else if(i==2)

else if(y>a.nows)}/*

1 s-1

2 s-2

3 1-s

4 1-2

5 2-s

6 2-1

*/else if(i==3)

else if(y>a.now1)

} else if(i==4) // 4 1-2

else if(y>a.now1)

}else if(i==5)//5 2-s}}

} return 0;

}

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 ...

hdu 1495 非常可樂

兩個杯子按大小排序,為s m n,1.只要n滿了,就把n裡的東西放到s中 2.只要m非空,就把m中的放到n中 3.如果m為空,把s中的放到m中 超時 include int n,m,s int main if ss aa bb 0 得到均分 if bb b 若小杯子裡裝滿可樂,將小杯子裡的可樂倒入可...