- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】
. k+ k% i! j2 O3 ]) G* l# x6 M5 S7 J" w& z7 j! O6 m) t
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。3 ^7 J+ s4 E9 n- B
4 Q8 ^5 v# A4 U" X3 ~
【输入格式】
/ X/ b# n0 f- D% w2 z5 K! d2 j- |# X! h4 O4 d( Y5 u' T& S
共一行,包含三个整数 A,B,C。
. H2 Q, [" c0 ]
. e8 q5 c, I* ?【输出格式】5 F$ f! ?1 H6 ^1 p
# {- H' ~. P+ @
共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。8 {1 T0 F8 P9 o8 L/ d
/ }2 ^, K+ e. u% E! f
【数据范围】" C0 c1 [- K6 _3 o9 m M* W
, R$ Z- {+ U7 t; R8 J0 Z- L 1≤A,B,C≤20# ~/ C0 [+ E6 D: X: q k
6 b6 _0 ^" |: i* Z9 Y
【输入样例】 n4 x5 P$ R& W2 _/ A3 [
, ~7 N5 D4 q" b9 t+ B1 Q
8 9 10# k: h$ s3 z% ~9 _. O( F
【输出样例】
w1 [) W. N$ p% n% r0 \8 Q7 ]; I9 c
1 2 8 9 105 B8 x9 m: q! H X& l/ i
【解题思路】9 s& w+ ]6 R' p, m0 p
9 }8 }. B. b& r1 v4 t
BFS简答模拟一下倒牛奶的过程。- from collections import *; \) q, y8 L2 k6 A
- a,b,c = map(int,input().split())+ }8 P/ P3 _3 C\" o& O, h& {+ _
- n = 22: Q+ G! f7 H7 q7 W8 o* W1 \
- st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]1 ~% h/ B8 B9 g& {7 U: J+ Y1 P- e
- 4 J; ~/ D\" i4 L; H* q
- q = deque()
+ b0 T/ w1 Q, D\" j, z - def ins(a_,b_,c_):\" z0 v- P' ~' b2 m5 R\" T
- global q7 t) t9 Q1 f/ K4 ?1 p0 D
- if st[a_][b_][c_]:return\" S) F$ M; R3 I
- q.append([a_,b_,c_])
: T, t% S7 V3 d p - st[a_][b_][c_]=1
# `: b' F\" _\" {/ ?\" q1 d - def bfs(): A0 r: D: j% U# _5 s$ H
- q.append([0,0,c]), v8 d0 U6 V L* j% \3 O/ N8 }2 W' x5 Z
- st[0][0][c]=1
1 a6 y( e2 \0 z - while q:1 C+ p9 |& ?+ r# u9 {, o4 U
- a_,b_,c_ = q.popleft()
* J3 ^( C0 \! B- r5 j- c2 L8 V - ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
/ i6 S- R6 e _8 [ - ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )! F$ I9 M9 ]! B# R
- ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )
+ `7 ^' ?! [- g4 U* S - ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) ), Q, ~3 L: s7 v) I
- ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )
$ O1 v6 z; g9 Z: R) Y p# d - ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )9 U/ ?# A, e! M0 b! F0 @( G
- bfs()
- Z* V1 M, i! P6 a' @- I# U, q - for c_ in range(c+1):9 u9 }2 Q2 e4 |( Z+ F3 l: W' H
- for b_ in range(b+1):
\" [. l6 p. e) ~\" F- S - if st[0][b_][c_]:
; E& ~3 l0 i& X6 I: _ - print(c_,end=' ')
$ p\" a; ]8 M4 [ Z0 A6 ~7 s+ [& O - break
复制代码
3 X( \' U& ?0 M |
zan
|