- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】
. y" i6 R$ q- j
; R6 D5 E- d! Q, H& U% X 农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
# R3 @, [* M0 {' q' q g4 R/ w+ T' o! T! u
【输入格式】4 A! X4 }( ?1 G% ^( b' r3 q0 {' J
1 S; y$ ?5 [8 O8 g# z
共一行,包含三个整数 A,B,C。, d5 ^' u) W. J1 Z) l7 o
# X& z% w. q/ [3 D: _【输出格式】
1 P: D4 x! G: K/ i% N
) J# z# x8 u% [0 n 共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
. h6 r/ H! P- i* j3 p: K4 j. H( I. I; y0 M+ M* w! G0 }
【数据范围】5 d) o- ^7 a- u
! z, t( [* n8 H' W6 E 1≤A,B,C≤20' j N2 p$ ~' s; v' O# x' U
; t8 U# V4 ~ G! u/ G: Y
【输入样例】
$ [8 O' I# X* ?7 d) z8 c
6 _! E4 ?' i! v: U8 9 10
$ D. v( e* [* B4 `7 }4 H【输出样例】
2 |) e* p# }1 P! T9 l, a! y f5 p% F
1 2 8 9 10
. `( }3 Y/ P4 s8 ^7 Y" n 【解题思路】
J# B3 M3 Y* ~, W t( r6 o/ q% b: `
& [; J- B8 F( R0 c6 s3 S BFS简答模拟一下倒牛奶的过程。- from collections import *, h |. t+ q4 m4 J% A
- a,b,c = map(int,input().split())
# v! `, E6 Z* k- O% x: B - n = 222 @, d$ C- G, ^
- st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
9 L; n9 r5 V8 f+ m& u! ~! R/ \) C1 @ - : W b! G& |: l4 U, u\" s& H
- q = deque()
) x! ?! ^/ F- p3 \+ K( L. A: @ - def ins(a_,b_,c_):
$ T' z& Z; Y4 T1 d& q8 H4 {) h, E# j - global q
4 H8 i! d; Q- @% q\" Z7 P - if st[a_][b_][c_]:return
: }3 P\" i: ~. w, p\" L$ j& v0 ~6 \) s - q.append([a_,b_,c_])+ r* [! o: S( D, y( G6 W
- st[a_][b_][c_]=1' @ K! j. E& o* d1 B
- def bfs():% b' G5 j& b% z3 a E5 Y
- q.append([0,0,c])
' L' ? F( m5 V- N* B - st[0][0][c]=1
\" H% D( j8 y' n7 s& F Z) M5 j$ y - while q:
' \ l! Y- |! W! q1 D - a_,b_,c_ = q.popleft(); ?- g# j) Z( L\" p
- ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
9 x* m1 n7 |, G3 M - ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
/ `( `' B/ i0 l$ X v, M - ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )3 e' `\" J) S. F2 ]
- ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )
: n5 t% Q% G$ w# K - ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )
2 a# G! C: g# t\" Z4 c) A( S - ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )
2 m, k0 o3 X$ R. y) T `, O - bfs()9 V: R) i# E% x
- for c_ in range(c+1):
2 v$ e5 L4 f( C0 i7 n c# H - for b_ in range(b+1): X& }4 M* ]6 E/ a; P2 r1 @
- if st[0][b_][c_]:) v# d$ U% g K3 G/ F% e
- print(c_,end=' ')
( B) u) h, v' ^) B' p - break
复制代码 + B: R: O' B1 m" ]( R
|
zan
|