- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】
6 @' \4 t# i0 B( [ m: B9 t7 J+ F1 B6 R6 R/ x# J3 n# y
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
0 l, M5 W% D! q0 T1 v$ K
$ o( \+ \9 @! h+ \0 o% K5 i7 o【输入格式】$ ~' P3 B- s7 e) D$ y& f
9 R+ ? y; D* }& a3 D
共一行,包含三个整数 A,B,C。
3 t* j7 v7 O% _- S4 Y$ t4 U, g) x% ], z
【输出格式】: i1 }! Y2 T5 K A" a2 _
! K+ c: c9 c2 S; i
共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
" H9 c' H6 v" t5 e# O' o X5 W! |7 Y6 o3 D' Q
【数据范围】! [# u1 p! e: p9 b2 _
" y& u( Z) r- E. G' c
1≤A,B,C≤20
, I6 p1 s" Z0 X- d& ~& J2 ` q5 {$ b7 V0 \* q$ C
【输入样例】2 R! g# `' ~3 d X; K- Q& R
$ J6 {# Z9 B8 T( _" A
8 9 10
& U9 t+ d' E! k6 V- C3 T1 w【输出样例】% N1 B) R- c- ?
% e0 A+ j) S& ?" E! L* M' |
1 2 8 9 10
: [# E" s. o5 \; g8 a( m 【解题思路】
! w' v: V" l. k
' M, V6 ~0 K7 w& i% E BFS简答模拟一下倒牛奶的过程。- from collections import *
: T, k9 s+ i: H: h+ P/ ~- b5 F - a,b,c = map(int,input().split())
& Z\" O9 d/ M. I& ]. a- I& \ - n = 226 i+ F) x: j, N. J# v9 ]# f% G
- st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]% ~# U- _* W0 j. i$ x
-
; [/ V0 l8 M( E# T( g - q = deque()( U6 A2 }, G2 A5 I0 F
- def ins(a_,b_,c_):
- ?\" m z$ h\" F9 N* b - global q
& f' V8 S1 q/ V. s5 \! F5 V/ @- s - if st[a_][b_][c_]:return
: R4 n8 z+ J9 E; Q - q.append([a_,b_,c_])
9 s4 R/ Q: O' \ - st[a_][b_][c_]=1
5 X' K8 A' b% N' N, ]/ t X( B! i+ \ - def bfs():
4 p' l$ d9 _: x0 w A4 W3 |' ?: e( ` - q.append([0,0,c])8 E! j. E3 A8 T5 E! I
- st[0][0][c]=1
! k) @- v\" s* x {+ R; a - while q:
w1 r) ~; s3 J# l) n% A# h! d - a_,b_,c_ = q.popleft()
* `8 G& C- \/ N\" j3 z - ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
$ D: J0 _* y$ J9 y! \; O4 { - ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
/ i; e0 T- @% v' s& Z5 w - ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )! V2 ?% @( c* i
- ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )
. Q6 z- [( t1 J0 D' A0 K& \ - ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) ); ~8 b7 B: d- F( H
- ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )
2 I3 s' V8 O' m* a - bfs()1 @$ J! g$ J2 Q% O! W4 U
- for c_ in range(c+1):
8 Q1 I# _2 g) m# y& g - for b_ in range(b+1):
3 ^% }* T; {: p. ~ p. s. u9 _ - if st[0][b_][c_]:
4 D% t1 [! V; z. B7 e' R - print(c_,end=' '), c4 e+ @' y, j' U6 W6 s* L- ?
- break
复制代码 / l) S6 j; x$ Y
|
zan
|