- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】0 ~! q' L2 M* }- c9 d. L1 R1 X8 w$ e
- }' M- l' ~6 R& H7 {9 y* Z8 X G
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
6 m7 ~0 ~4 z7 }# A5 k+ T- ^( D6 z
8 U I7 i( g5 D3 \【输入格式】
( j0 d$ S! m/ x: I V
9 K9 L8 @' N" T 共一行,包含三个整数 A,B,C。/ K% Z5 g# ]' c6 x7 H, T
& n g1 W3 M/ ~. ?. s/ o! y
【输出格式】0 a* ?& c8 r6 z2 `' y `' v
/ e% M' V* h$ \
共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。1 r" h5 C! {& J! A$ a$ ?6 p- ]
8 c8 G2 S$ @# {. r( Y$ j
【数据范围】
- [; n- w+ L4 j7 }" Z' T# v; y" p, \, u1 C; b' ]% j
1≤A,B,C≤20
@! e1 s4 B6 g. ]1 l7 B7 X0 M$ N) s3 r9 W! A
【输入样例】8 H& S/ b9 U: {0 D
3 s' h/ C8 u( u: e# ?& J5 k8 9 10* ?4 t- ~( R5 m" r. j4 \" l
【输出样例】
( R& F+ }, b; f8 ^* s1 k0 j: Y' a& N' ]4 L3 U K
1 2 8 9 10& A5 M7 L9 W! e, k/ p; u0 q
【解题思路】# b8 G' Z2 t! | ^* R0 e3 N' s
1 {% i6 d# y2 d/ r BFS简答模拟一下倒牛奶的过程。- from collections import *% n+ O. f' U+ ^! L, G- I& L7 a3 d0 E, o
- a,b,c = map(int,input().split())
+ T! B. ?' r K - n = 228 H+ Z+ F/ y! Z\" | f\" v
- st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
$ @# E- N: j* L0 k9 @ -
8 w3 c7 Z8 p) X- t! d9 r% A# Z - q = deque()
, s1 j4 e\" R) O& _7 M% n# h - def ins(a_,b_,c_):
( y4 x$ ~7 g9 i& Y# |% d6 u9 e - global q6 p& K; N% d) O
- if st[a_][b_][c_]:return1 F7 U- S6 J7 g
- q.append([a_,b_,c_])
1 Y/ r\" _: n/ ? T& u8 | - st[a_][b_][c_]=1
/ p' w2 O! {\" R8 m% ]\" j - def bfs():6 P$ P6 W4 G4 s& X
- q.append([0,0,c])
$ P& B9 } D& u - st[0][0][c]=1
. l& ]9 ?& W j\" L4 w - while q:
6 e5 A2 M( l+ y - a_,b_,c_ = q.popleft()
1 U# K1 Z4 f. G; B9 I - ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ ). x3 v8 Z* O' X# i& U\" Z
- ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
* t \2 Y( m) ]- G - ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )# _) B/ q3 K. n& T! ^& @
- ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )/ e+ W& {6 ]# Q' f% [
- ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )
2 c# w! |% I9 L l I# ^ - ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )) x) O# y: _9 i9 h
- bfs()
8 ~\" a0 _5 g: z. X( n - for c_ in range(c+1):# T1 O o5 b0 Q' Q) n3 f
- for b_ in range(b+1):3 t9 ?* F7 Q) w# t, r( T) l
- if st[0][b_][c_]:
! ~$ Z1 M6 E3 t/ F; E+ x - print(c_,end=' ')
2 R$ {1 U: y% R, W+ s - break
复制代码 1 ?1 U; p. x$ `! g4 z% x
|
zan
|