- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】
. r# W4 k1 H2 Y3 {7 r4 y, I
; b5 b* [8 b3 V7 h$ ` 农夫约翰有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶。有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。请你编写一个程序判断,当 A 桶是空的时候,C桶中可能包含多少升牛奶,找出所有的可能情况。1 [0 Q# a- N- J! c
% v6 [8 E- \6 F
【输入格式】, w; x: m7 H& a/ S$ X4 I7 Q
4 n" e; p T' ~( v1 y/ \& }* m 共一行,包含三个整数 A,B,C。
7 @6 \! A) U p7 N
i& ?: n) h$ N- j! t7 o【输出格式】
5 l" F% U/ q1 }6 N* Q' U
9 D- m+ ~( }9 f/ v5 F 共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。
; p" p! c( }- E( L4 t; N
# \" c" \8 B9 C% b9 r1 n4 D【数据范围】
" E: l& F) V" c6 P# l" U
6 b& v/ e. [9 E+ n5 D 1≤A,B,C≤20% \4 f% o' h6 ^6 x$ L) X. W
; G. _! v+ L/ I9 A! [& Q
【输入样例】
% M$ @ B4 ^/ {- ~( u- {7 [" G. N! ~5 K) k" s9 e2 C/ e
8 9 10! t6 B+ U8 _ P1 Z! R7 o/ m7 n; o1 y s
【输出样例】
1 a, s' E& A% \4 c: }
8 n& u8 r( _' d3 u& p! N1 2 8 9 10
% c7 k- Q1 A; E+ s+ v/ s 【解题思路】. C2 ?: n4 h/ ^3 S+ O$ @' Q
* l! K& T( m2 f" w- G
BFS简答模拟一下倒牛奶的过程。- from collections import *3 c' T3 a4 Z* I7 V# }+ p
- a,b,c = map(int,input().split())
/ c& J6 t y1 {8 b3 J9 o5 w/ D - n = 22' B, N! A, d. C. E. ]( y+ g
- st = [[[0 for _ in range(n)] for _ in range(n)] for _ in range(n)]
' g) ~. F% s2 r; R9 a' ~2 I -
/ b8 O, c, i- J/ z5 e - q = deque()+ _: J' p e1 [/ p
- def ins(a_,b_,c_):2 K; X6 j: y, }% J& ~
- global q: y9 u: C. O9 L( y) Y8 ^: e
- if st[a_][b_][c_]:return8 S- o) M* P3 V\" o
- q.append([a_,b_,c_])
# N! r# l. N$ @* M - st[a_][b_][c_]=1- I4 J: t& ]+ d% @& O: U
- def bfs():8 w) m6 w V3 E
- q.append([0,0,c])
9 F; x3 ^# K/ d: L8 a5 \. [! `7 Q7 \ - st[0][0][c]=1: o% e% D4 I/ g* m3 O! z
- while q:' S: g y( n6 t9 i) l
- a_,b_,c_ = q.popleft()/ J0 e( b0 N$ S5 i
- ins( a_-min(a_,b-b_) , b_+min(a_,b-b_) , c_ )
' @) w; H) r) m3 L) `2 B - ins( a_-min(a_,c-c_) , b_ , c_+min(a_,c-c_) )% U; I% j+ e. Q4 k. w5 q4 B
- ins( a_+min(b_,a-a_) , b_-min(b_,a-a_) , c_ )
1 g4 \. x/ ^( z9 y - ins( a_ , b_-min(b_,c-c_) , c_+min(b_,c-c_) )4 {6 |) V' m& N: V
- ins( a_+min(c_,a-a_) , b_ , c_-min(c_,a-a_) )
$ ]: v- a, N8 Y - ins( a_ , b_+min(c_,b-b_) , c_-min(c_,b-b_) )7 a& i4 W* O* R$ _6 @/ v
- bfs(), ~* T3 }, k+ K0 K0 U
- for c_ in range(c+1):
8 z4 w2 t O& q( n - for b_ in range(b+1):
% G E8 S: N' v* M - if st[0][b_][c_]:4 c. X; X& ^2 W# A# I
- print(c_,end=' ')- A5 Y) m o; R5 F# k
- break
复制代码 6 N5 Z8 f3 x& @
|
zan
|