- 在线时间
- 479 小时
- 最后登录
- 2026-5-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7813 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2931
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1173
- 主题
- 1188
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】1 u. {2 Q: D# M1 }" N
6 |7 N/ C: z! T. b* `. {2 \
农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。) ?: y2 L& g4 `" b, T' C8 C
0 P9 A- p; ?* w1 R8 M% D8 \+ j
【输入格式】2 b* C9 e/ ^/ ~ q* |8 c
& f5 v- Y2 n& R8 t 共一行,包含三个整数 A,B,C。/ W& E1 i+ B7 C
4 l! \" X" X% u0 a2 ?【输出格式】0 o1 y J8 l* C3 s5 ~
2 u7 d% n9 }+ Q) `3 u 共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。5 E! r, y4 H* F. T2 [
: g+ y4 y2 ?9 P7 O9 N【数据范围】1 S2 v7 \ b$ N& Q" |0 u5 f
) e- O& T3 |3 H1 v: O 1≤A,B,C≤20/ q9 \; X/ q$ @ O6 Q- C0 ~. E2 q% t
- O4 p9 D; k* E/ H
【输入样例】
/ N* g# @9 h7 ~
3 u$ Z! m* i3 D/ q A2 z% {8 9 10
# m& n7 s `/ @" x( C. W5 i【输出样例】
4 J2 f# @3 F! J' J5 z' E8 D9 H( x# }+ s. l
1 2 8 9 10
+ w# n+ e) i/ F 【解题思路】
6 ^: K( T$ I- d, J; J5 I$ T5 U" ? `) i1 @$ n4 X( u; A% X, L* v6 n
BFS简答模拟一下倒牛奶的过程。- from collections import *
: }: ^8 z; {* L* { - a,b,c = map(int,input().split())
* N |\" B\" u- t- e3 a6 v- v - n = 22 {9 q6 ]0 l3 E$ L* M\" X
- st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]: B' ^1 O! ]\" K2 D) n9 _
-
# L7 _# l a. J! \6 Y8 Q0 x/ i I/ Z1 | - q = deque()7 q' i+ `- i& B5 B( i R3 `
- def ins(a_,b_,c_):
; ?6 C9 W' a3 L6 \ - global q
V! [, f% M8 F2 O9 T - if st[a_][b_][c_]:return
7 @1 L' N, b% ?* H1 v& D% w4 @+ { - q.append([a_,b_,c_])+ x: {! n6 k- V' K( N4 x; v: B3 C8 a
- st[a_][b_][c_]=1
& F h3 Y+ X5 S* ~5 T) F - def bfs():
- P; N0 j. \: N% L/ a - q.append([0,0,c])
% l0 O+ V5 ] ^+ x - st[0][0][c]=1/ U7 U3 o7 N+ A7 ^- V) @
- while q:
* F) R* j\" a$ o6 E\" e+ ~/ V$ z - a_,b_,c_ = q.popleft()
& Q- } u5 Y |/ \* v3 t. W9 a( N - ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )2 c$ Z) |! H( n
- ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )
. D [/ P; h\" H' W6 B - ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )
/ P! i2 c5 p$ h% Z - ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )1 @3 E4 Q# n, b
- ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )0 C5 Q9 X% d3 k, b! [2 c
- ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )
2 O1 `; q: P% @5 c' _1 O) \: ^ - bfs()- d8 |0 ]; l* x\" u+ F
- for c_ in range(c+1):; s- ]$ @1 d) A( U: v; @7 ]- J
- for b_ in range(b+1):
! L l6 w0 W- b. H0 J - if st[0][b_][c_]:- Y4 F( W: H! V\" W/ R2 ]5 G
- print(c_,end=' ')
6 r3 D- y3 m6 j* U- l - break
复制代码
! {/ C/ i! R8 j' I+ B( z8 n |
zan
|