您的位置:首页 > 其它

CSU 1209 Three Jugs (数论)

2013-10-04 20:17 246 查看

1209: Three Jugs

Time Limit: 1 Sec Memory Limit:
128 MB

Submit: 304 Solved: 57

[Submit][Status][Web
Board]

Description

We have three jugs A, B, C without any calibration, and an infinite supply of water. There are three types of actions that you can use:

(1) Fill a jug.

(2) Empty a jug.

(3) Pour from one jug to another.

Pouring from one jug to another stops when the first jug is empty or the second jug is full, whichever comes first. For example, if A has 5 gallons, B has 6 gallons and a capacity of 8, then pouring from A to B leaves B full and 3 gallons in A.

Now you need to calculate the minimum accurate gallons of water we can get by using the three jugs.

Input

There is an integer T (1 <= T <= 200) in the first line, means there are T test cases in total.

For each test case, there are three integers a, b, c (1 <= a, b, c <= 10^18) in a line, indicate the capacity (unit: gallon) of the three jugs.

Output

For each test case, you should print one integer in a line, indicates the minimum accurate gallons of water we can get by using the three jugs.

Sample Input

2

3 6 9

6 10 15

Sample Output

3

1

HINT

Source

CSU Monthly 2013 Apr.

题意:

有三个瓶子,可以往里面倒水,也可以三个之间互相倒水,但当一只瓶里水满或另一瓶子水空时停止。

问经过任意步骤后,可从某一瓶子里倒出来的最少的水量。

例如第2个例子:

1) 1瓶子和2瓶子先装满水

2) 1瓶子往3瓶子里倒完水,1瓶子空,3瓶子里6加仑水

3)2瓶子往3瓶子里倒9加仑水,3瓶子满,2瓶子剩1加仑水

4)可从2瓶子里倒出1加仑水

思路:

对三个数求GCD

/*************************************************************************
> File Name: I.cpp
> Author: BSlin
> Mail:
> Created Time: 2013年10月03日 星期四 17时56分26秒
************************************************************************/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iterator>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#define MP make_pair
#define INF (1<<30)
#define PI acos(-1.0)
#define esp 1e-8
const int dx[4]={0,0,0,0};
using namespace std;
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)
#if defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__)
#define LL __int64
#define LLS "%" "I" "6" "4" "d"
#else
#define LL long long
#define LLS "%" "l" "l" "d"
#endif

LL gcd(LL a, LL b) {
if(b == 0) return a;
return gcd(b,a%b);
}

int main(int argc, char** argv) {
int t;
LL a,b,c;
scanf("%d",&t);
while(t--) {
scanf(LLS LLS LLS,&a,&b,&c);
printf(LLS"\n",gcd(gcd(a,b),c));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: