- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】
2 @, _$ C6 i+ `3 `% t j: O; j1 g1 W* N8 q1 \& A
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。- t9 r; n% L6 o& | ]7 V% m1 P8 O
6 J! \1 t; u# T- [: V7 I【输入格式】
% f" h! { C8 r2 A& m+ P Q* R3 M3 c9 M( p5 Z7 X; P- Y
共一行,包含三个整数 A,B,C。
2 C4 g+ q* s$ a, Y. a9 j( b# s* s! h) k) j1 v/ P" } K
【输出格式】7 U$ c: O. `1 d) o3 {
! I4 A2 X) n" s8 p3 F0 T' r 共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
& T4 e2 e4 }& ]3 q: ~; z7 y1 q' K, F6 I2 V1 |
【数据范围】
7 B% v4 T1 z9 {+ ]# s$ o& A0 g% B9 w1 J7 x, t" u
1≤A,B,C≤20
0 x2 X, g4 J2 Y, h$ K( V1 c
( Q& C3 O. M% f, G8 {% q【输入样例】5 V' K, `0 L' T$ i$ k7 t6 S
; f$ [! o" l! z: `5 J% s
8 9 10, G+ _, ?% B5 C7 l
【输出样例】
( X# K& {* R' y$ |
+ _5 ]6 A% \/ Y5 [% n1 2 8 9 10
5 K+ c3 }0 v9 y, r 【解题思路】
1 ?# X) h1 C' N8 m; s* l& S% ]& x9 E% p- u- V* A# G' `
BFS简答模拟一下倒牛奶的过程。- from collections import *
8 L) |$ a2 G K3 h3 c - a,b,c = map(int,input().split())
\" i0 Q; @3 R) O0 P, T2 I6 U - n = 22
! t, ^4 a2 A5 \ - st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]+ L% D2 o8 j& ~3 r# U% R
-
; W* P* s\" r. n( Z\" W; |0 d% a - q = deque()' I$ z% Y1 {9 p7 F6 V
- def ins(a_,b_,c_):8 B# h7 v6 q& x6 W; d4 x! |
- global q
$ X' R( f' \% Y - if st[a_][b_][c_]:return
/ {\" D$ U+ k5 }, C% U1 Z - q.append([a_,b_,c_])
* V: x- f2 M; q0 G/ C( g - st[a_][b_][c_]=1% Q$ b+ S+ q% M$ A; h& i3 |- I
- def bfs():
9 F9 p6 E1 f! A\" o - q.append([0,0,c]) j7 m\" z, n\" k9 t7 m6 z
- st[0][0][c]=1% D* s0 S, _: }
- while q:8 h4 D+ ^9 _3 ^! J6 r8 K! W\" u
- a_,b_,c_ = q.popleft()+ V5 N& M, p5 Q1 g8 u7 U/ P
- ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
* |* {& J\" O. y- k2 L: l* e+ [5 z - ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )+ f7 ]* \' m2 g7 [) F1 A% ?
- ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )+ y: L4 \5 C\" b2 u
- ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )
* `1 m# B0 C7 x3 f: I% M - ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) ); F. N, I5 y+ Z! Z8 ^
- ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )2 D( x7 i0 V; O. F# s( \
- bfs()6 n( L8 y+ @ U3 L
- for c_ in range(c+1):
% ]/ j( I& H2 ~# a - for b_ in range(b+1):
$ Q) S5 u! G0 @\" n: ] - if st[0][b_][c_]:
$ h6 A4 H& z, D7 W% }4 q - print(c_,end=' ')
5 H$ p: s+ c\" R. v3 p* t1 M6 n' J1 ~ - break
复制代码
& a9 F& F7 d/ W! H, j7 ^, s |
zan
|