- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】" V( {" Y- w7 i7 ?# p' c
& i8 s) i- I7 D, ]( f0 c
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
1 b# k( [& n% `: P3 E- w9 _% w% h9 [" ^+ b
【输入格式】1 I7 O& x+ G4 _
6 \4 s. e& O$ \" M 共一行,包含三个整数 A,B,C。
. H* O7 d+ H) X0 j6 f
' D5 Q$ ^5 q6 Z0 a! B- \# f/ P# j$ \【输出格式】0 Y* F& I% q [9 I0 N
6 F: _ M( J& i7 V/ s$ b 共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。6 w" N) w* D! ^! t! i6 F/ j( _
; v8 A: r; B, A0 Q2 {【数据范围】
# Y" f4 @% ~, k& P$ I7 j2 e x$ |* S$ \! D
1≤A,B,C≤20* | Y% a4 C! w: f
3 w; ?; Q( l' x9 I2 u. c
【输入样例】4 o0 y5 M$ }- R2 ~
' m' z( B0 U8 s
8 9 10) s5 E @) d9 Q1 Z- a5 z' a
【输出样例】
& G2 r' b9 `. K
3 y- A' g$ D- s1 2 8 9 10
3 ], f/ @+ @- j( ]2 u) @" U 【解题思路】- r" m0 H. \/ E/ Y6 A- x) }/ \9 L' o
; S* ]5 z% Y: K9 D" f g BFS简答模拟一下倒牛奶的过程。- from collections import *
0 D. I* N/ _/ {- `# c9 H - a,b,c = map(int,input().split())' n' t+ ^' t) z( H! ?9 s
- n = 226 {) D% y9 {# h. G1 t
- st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)] O& p+ |( @' f2 B% c t
- & }4 `5 Z8 J( k* n6 c' }
- q = deque()
; a\" h; |9 `# D) I. e - def ins(a_,b_,c_):
, x: g$ n, l& a+ a/ n - global q& ~3 g1 O/ k, O0 }* {3 Q' @
- if st[a_][b_][c_]:return
\" u! x! t3 g# _ - q.append([a_,b_,c_])
) B% L. C2 U7 Z1 `1 S4 I3 j - st[a_][b_][c_]=1
! { c/ y$ p7 }/ G6 F - def bfs():
2 x3 J% J/ Y. f5 X - q.append([0,0,c])0 @ |7 h9 }7 n
- st[0][0][c]=1
! W c& F; d( {3 b1 I0 Q; c |# |% z - while q:\" S' |+ ?& ?: B' H3 A! h) S3 x4 Y
- a_,b_,c_ = q.popleft() Y: k$ e5 ?0 f& x5 f& p7 a, A
- ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
1 I# |7 p* O\" L- A3 w& D( \- j - ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )3 l6 q6 ^% u) c& Q. ?\" W5 d, K( _
- ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ ): e. |' f+ X. j! O5 Q
- ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )+ v; t7 n2 s9 v# U4 Z9 D) y/ S
- ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )9 P$ U& T; U\" e- |5 w4 j
- ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )7 f+ d/ x( ]3 H3 S' E
- bfs()
9 p8 K8 }3 }) P0 @7 u - for c_ in range(c+1):
V% g2 J5 X! t- g\" x; H% m - for b_ in range(b+1):
7 o- u1 H\" e& B1 y7 j5 l# \, N - if st[0][b_][c_]:$ p\" a7 q9 e+ @! ?
- print(c_,end=' ')
- Y2 K: y( K7 D\" s3 y - break
复制代码 $ |1 q9 H' Y, o3 Q. l
|
zan
|