UVa 571 Jugs(經典倒水問題)

2022-09-16 00:33:14 字數 630 閱讀 9502

題意:

有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 #include #include int main()

else if (b == cb)

else if (a == 0)

else if (a != 0)}}

return 0;

}

UVA 571 Jugs(經典倒水問題)

題意 在電影 虎膽龍威3 中,布魯斯和傑克遜要面對這樣乙個問題,他們有乙個3加侖的杯子和乙個5加侖的杯子,他們被問這麼把5加侖的杯子裡面填滿4加侖的水。這個問題可以被描述為這樣乙個謎題。你擁有兩個杯子a和b,以及無盡的水。你可以執行以下3種操作 1.填滿1個杯子的水 2.倒空1個杯子的水 3.將1個...

UVA 10635 J 最長上公升子串行

題意 給你長度為a 1與b 1的兩個數列,數列的數各不相同,並且只包含1 n n的數,求a與b的最長公共子串行。題解 由於兩個串最多長度都為250 250所以n n的最長公共子串行的做法不適合,但是我們可考慮,乙個數列中,所有的數字各不相同,所以我們可以通過將a陣列標記1 a 1,然後將b陣列通過a...