加载中...
题解 UVA571 【Jugs】

前言:

这道题想了好久,读了好几遍终于找到了突破口,于是想写篇题解记录一下

正文:

分析题意:

两个水壶,分别给出两只水壶的容量和所要获得的水量。

倒水是有规则的,刚开始两个水壶都是空的,倒水时要倒满。

当$A$向$B$倒水时,倒完后其中一个水壶要为空,所以就相当于每次操作,其中一个水壶必须为空的。

思路:

因为题目给出$0<c \times a\leq c \times b$, $N< c \times a$,并且$c \times a$与$c \times b$互质,所以只要每次$\bmod A \bmod$倒满,然后倒入$B$,如果$B$满了之后,再全倒掉,一直重复,知道得到$cb=N$

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int ca, cb, na, nb, n; 
    while (scanf("%d %d %d", &ca, &cb, &n) != EOF) {
       if (cb == n) {
            printf("fill B\n"); 
            printf("success\n"); 
            continue;
       } 
       na = nb = 0;
       while (nb != n) {
            if (na == 0) {
                printf("fill A\n"); 
                na += ca;
            } 
            if (nb == cb) {
                printf("empty B\n");   
                nb = 0;
            } 
            nb += na;
            na = 0;
            if (cb < nb) {
                na = nb - cb; 
                nb = cb;
            }  
            printf("pour A B\n");
       }
       printf("success\n");
    }    
    return 0;
}

后记

这道题目本身并不是很难,只需要读懂题意,找到突破口,方能迎刃而解,最后求点赞和评论QAQ


  目录
劳动
快乐