題目:
大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s (s<101)毫公升 (正好裝滿一瓶) ,它們三個之間可以相互倒可樂 (都是沒有刻度的,且 s==n+m,101>s>0,n>0,m>0) 。聰明的acmer你們說他們能平分嗎?如果能請輸出倒可樂的最少的次數,如果不能輸出"no"。
輸入:
三個整數 : s 可樂的體積 , n 和 m是兩個杯子的容量,以"0 0 0"結束。
輸出:
如果能平分的話請輸出最少要倒的次數,否則輸出"no"。
樣例:
分析:挺簡單一bfs但是那個迴圈裡的破玩意我打錯了好幾個的地方,被自己蠢哭了◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include12 #include13 #include14 #include
15 #include16
#define pi acos(-1.0)
17const
int inf = 0x3f3f3f3f;18
const
int ninf = -inf - 1
;19 typedef long
long
ll;20
using
namespace
std;
21struct
node
22st;
25int
a, b, c;
26int d[105][105][105
];27
int used[105][105][105
];28
intbfs()
2939
}40 st.x = a, st.y = 0, st.z = 0;41
q.push(st);
42 used[st.x][st.y][st.z] = 1
;43 d[st.x][st.y][st.z] = 0;44
while
(q.size())
4561
else
6266}67
if (i == 1 && n.x != 0)68
74else
7579}80
if (i == 2 && n.y != 0)81
87else
8892}93
if (i == 3 && n.y != 0)94
100else
101105
}106
if (i == 4 && n.z != 0
)107
113else
114118
}119
if (i == 5 && n.z != 0
)120
126else
127131
}132
if (!used[n.x][n.y][n.z])
133138
}139
}140
return -1
;141
}142
intmain()
143152
int ans =bfs();
153if (ans != -1
)154 cout << ans <
155else cout << "no"
<
156}
157return0;
158 }
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 若小杯子裡裝滿可樂,將小杯子裡的可樂倒入可...