- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】3 U, | D' }* k: O3 y
. q' j" z9 P. `7 O6 b: {
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。
2 C l) w( x( E, J$ _8 {* \7 U5 U6 I1 j) X5 \
【输入格式】% h" [0 O+ t5 u* X
' N) d7 T+ S- o
共一行,包含三个整数 A,B,C。" \* M: b) r: r9 w6 ?
- c5 Z/ m! C7 }& j
【输出格式】
* t3 p/ \ [$ P: _' Y" R% o& v z) s4 p( ]3 `
共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
% h3 P; S0 G) ?2 a
% ?% k, s9 Q. h, g【数据范围】5 R! g1 }, D) }# S9 ~. L
% |$ I+ P# g( L+ p5 Z$ w2 p 1≤A,B,C≤20
- [9 t( b2 {1 [/ c+ b, n3 r
6 K0 f) [% K9 p; W i* s【输入样例】1 B& {- f% v' v2 Q0 c# K B3 P
6 V* ^/ k, G3 G* d) O! b8 9 10
# E+ D8 t, O* @, C$ F: Q* J【输出样例】, n: E* r; _& U, T( u
+ T4 d) |; R' Y- c1 o; c1 2 8 9 10
! L, {5 c l4 A- C& r 【解题思路】, [9 p4 e) s g, N) t" n7 j
% z: p& p: y7 Q: l7 d7 H& J$ M
BFS简答模拟一下倒牛奶的过程。- from collections import *
8 @6 o- N+ e; e+ {3 n( b0 D5 T0 q% X - a,b,c = map(int,input().split())
4 p- j' K5 y2 U% ~4 N - n = 22
' |5 p- b0 i. M4 y - st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]- \6 r7 ?7 E5 I* i% F\" }1 P- J
-
5 M+ k* Z3 v& @! e$ c1 K - q = deque()
0 U# O1 D' x\" m7 @\" A0 u - def ins(a_,b_,c_):- |6 ~! p, k) u
- global q; {& D7 ~& H8 a
- if st[a_][b_][c_]:return
9 W! x8 B1 U& l- c, `7 ^ - q.append([a_,b_,c_])- V: S+ q8 X! T; Z' s3 S- n- U) V& u. R
- st[a_][b_][c_]=1
: e) z( {, ]) o. \# ^- _* d$ Q - def bfs():. S4 G! N: a! j T6 v' y0 A+ _0 S
- q.append([0,0,c])
, R/ W7 y5 w$ m4 L) d. O. m - st[0][0][c]=1
; B2 v1 r0 i6 e b - while q:
* J3 M9 w8 |3 U z1 m4 F5 X - a_,b_,c_ = q.popleft()
0 [1 c. }2 N: t4 j2 t4 B/ Q - ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ ) r0 |1 |' I1 v% n1 L0 J9 e
- ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
% }7 k6 n7 \4 c' m - ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )
1 m/ y7 ~\" D. D' L - ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )7 Z( G1 y# Q( [1 P' x
- ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )1 V+ t) N4 h, a
- ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )8 e3 q3 y3 X! H/ y+ F ~) H3 z6 r, N
- bfs()1 ? B' W* T2 u6 ^
- for c_ in range(c+1):, r, V, E0 V4 K. P4 F
- for b_ in range(b+1):
R. E6 d5 I7 s+ S$ x - if st[0][b_][c_]:' J; K9 V2 l8 ?# a& g
- print(c_,end=' ')& l$ M0 r$ l: V# Q\" i6 x7 `* o
- break
复制代码 & O5 u- I0 `9 M9 V2 ~" h5 n- r
|
zan
|