- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】2 K) w) u1 K7 V: h. g- A* W0 f
7 `. E" v9 e" g7 e5 ]4 f 农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
; s' m7 M$ ^: o" o* Q" x; Q/ [7 e, ?6 c0 B$ z9 V* A% ]. J/ K
【输入格式】
4 n+ e: i! g5 m6 z
- V/ o8 ^; J1 { 共一行,包含三个整数 A,B,C。* l/ q; Q' m% V- v& t1 `, b
1 T0 P4 q& v9 t, v& f e) e, e3 y【输出格式】 @- e5 ^" a9 b- H7 U
8 H8 J( Z" N3 G: y 共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
* \1 X* M& ^" b& q
$ U, ?- G& C4 {+ {+ Q1 L【数据范围】 \0 t4 H6 V4 G, W! [0 C
6 G; k6 X3 t4 C# v3 Y- ~ 1≤A,B,C≤20
2 V( P# P8 L( [1 W; U
2 Z6 X8 P8 P: n' m6 Y【输入样例】
0 {) Y2 x0 Z+ P1 \0 k
$ L. a( p% x m/ y8 9 10
0 S- j# q _7 E9 @0 v【输出样例】
3 t k% Q! M, D) W7 v& @
2 @$ y5 x9 P9 @2 L. e9 g- M1 2 8 9 10) q9 {2 g4 H$ C" U+ D% O2 ]6 i; h- x) s3 V d
【解题思路】' {/ D3 k; D. L' Y$ a* d
, U5 j6 T4 r5 j+ B8 a4 c, P# }
BFS简答模拟一下倒牛奶的过程。- from collections import *: ?% C% J, Q. e1 b0 G+ T
- a,b,c = map(int,input().split())
8 m! f2 E5 Y7 L) l: c+ J( p - n = 22) p5 p, O$ O8 \2 o% s3 t! Q8 w
- st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
+ G+ X6 z6 E4 F5 W1 S -
4 W: P5 J% g+ [6 }; Z - q = deque()! N. X# y- p w! v7 i y% B* L' s
- def ins(a_,b_,c_):. Z9 Z, n# y }9 J
- global q+ n# u, L) P# H
- if st[a_][b_][c_]:return
8 x* l1 Y( x* w- v7 Q - q.append([a_,b_,c_])
+ m: |( b' }2 l$ W/ { - st[a_][b_][c_]=11 j- l\" N% W$ X7 Z( T\" w
- def bfs():\" [8 |+ m& g4 i& Y\" {
- q.append([0,0,c])
. B0 O9 i5 i/ _, D+ j - st[0][0][c]=1+ }8 ~: a$ h- E. G* t* S$ ?: _5 \
- while q:: B+ o$ l8 L5 k
- a_,b_,c_ = q.popleft()
) |. y/ n, P0 d! \5 r% V, l4 s - ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )$ t5 P! i( g& f# J3 K! H1 Z$ G
- ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
) U2 b) Y% j: i9 _+ `6 q$ x - ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )
+ \4 W/ M7 O, S2 p* z - ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )
* C! |' l+ ?8 [ - ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )
9 j( j: l$ A+ H7 M1 U+ [/ E* l - ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )) z+ O& m- K+ |: I
- bfs()& o; u* S! d2 Y& U
- for c_ in range(c+1):
6 L2 ^( f8 h' ? ~) J7 S - for b_ in range(b+1):
2 a! y4 {0 r+ W - if st[0][b_][c_]:; L. p# ?, W7 r8 c
- print(c_,end=' '); t1 p7 f2 [/ v# |. G8 H* X
- break
复制代码
2 d6 o' }6 X; R9 n% p) h6 U |
zan
|