zoukankan      html  css  js  c++  java
  • UVa 571 Jugs(经典倒水问题)

    题意:

    有A, B两个容量的罐子,A B互质,可以对其执行一系列倒水操作,最终使B中剩下的水位n

    思路:

    1. 前提条件:如果A B互质,则 r = x*A mod B,对于x∈[0, B-1]  r≠0. 这个很容易用最小公倍数证明之。

    2. 有了前提条件,则证明 r1 = x1*A mod B,  r2 = x2*A mod B,对于x1, x2∈[0, B-1],x1≠x2 有r1≠r2.

        下面用反证法来证明之:

        如果x1, x2∈[0, B-1],x1≠x2 有r1=r2,则存在 (x1-x2)*A mod B = 0.

        由1知,显然矛盾了。所以2成立。

    3. 由2可得,当x取遍[0, B-1]的值的时候,r也一定取遍了[0, B-1]区间里面的值。

    对于本题来说,我采取下面的一种策略:

    每次A是空的就加水,不空就向B倒,B满了之后就empty掉,这样在B中一定可以形成0-B的任意一个解。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    int main()
    {
        int ca, cb, n;
        while (scanf("%d %d %d", &ca, &cb, &n) != EOF)
        {
            int a = 0, b = 0;
            while (true)
            {
                if (b == n)
                {
                    printf("success\n");
                    break;
                }
                else if (b == cb)
                {
                    printf("empty B\n");
                    b = 0;
                }
                else if (a == 0)
                {
                    printf("fill A\n");
                    a = ca;
                }
                else if (a != 0)
                {
                    printf("pour A B\n");
                    if (a + b <= cb)
                        b += a, a = 0;
                    else
                        a = a + b - cb, b = cb;
                }
            }
        }
        return 0;
    }
    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    黑客工具包ShadowBrokers浅析
    浅谈Miller-Rabin素数检测算法
    辗转相除法(欧几里得算法)的证明
    2019年年终感言
    详解矩阵乘法
    计数类问题中的取模运算总结
    浅谈同余方程的求解与中国剩余定理
    模板测试题
    洛谷 P3811 【模板】乘法逆元
    同余知识点全析
  • 原文地址:https://www.cnblogs.com/kedebug/p/2802927.html
Copyright © 2011-2022 走看看