# Greedy# Arithmetic# GCD

h385 - 12970: Alcoholic Pilots

🔗 前往 ZeroJudge 原題

題目描述

題目給定兩個飛機的速度和距離,要求判斷哪個飛機先到達機場,並計算兩個飛機到達機場的平均時間,以簡化分數的形式輸出。

解題思路

首先計算兩個飛機到達機場所需的時間。到達時間等於距離除以速度。比較兩個時間,判斷誰先到達,並輸出相應的訊息。然後計算兩個到達時間的平均值,並將其簡化為最簡分數的形式。簡化分數的過程使用最大公約數 (GCD) 來完成。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
long long a,b,c,d,ca,g;
long long gcd(long long x,long long y){
    if( y==0 )return x;
    return gcd( y, x%y );
}
int main(){
	while(cin >> a >> b >> c >> d){
		if(a+b+c+d==0)break;
		b*=c;
		d*=a;
		a*=c;
		cout << "Case #" << ++ca << ": " << ((b>d)?"No beer for the captain.":"You owe me a beer!");
		g=gcd(a*=2,b+=d);
		b/=g;
		a/=g;
		cout << "\nAvg. arrival time: ";
		(b%a)?cout << b << "/" << a << "\n":cout << b/a << "\n";
	}
}

Discussion