結果
| 問題 | 
                            No.229 線分上を往復する3つの動点の一致
                             | 
                    
| コンテスト | |
| ユーザー | 
                             data9824
                         | 
                    
| 提出日時 | 2015-06-19 23:39:06 | 
| 言語 | C++11(廃止可能性あり)  (gcc 13.3.0)  | 
                    
| 結果 | 
                             
                                TLE
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 946 bytes | 
| コンパイル時間 | 350 ms | 
| コンパイル使用メモリ | 57,600 KB | 
| 実行使用メモリ | 6,948 KB | 
| 最終ジャッジ日時 | 2024-07-07 04:26:11 | 
| 合計ジャッジ時間 | 176,563 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 13 TLE * 30 | 
ソースコード
#include <iostream>
#include <algorithm>
using namespace std;
long long gcd(long long x, long long y) {
	do {
		if (x < y) {
			swap(x, y);
		}
		x = x % y;
	} while (x > 0LL);
	return y;
}
long long lcm(long long x, long long y) {
	return x * y / gcd(x, y);
}
int main() {
	long long t[3];
	cin >> t[0] >> t[1] >> t[2];
	long long multiple = lcm(t[0], lcm(t[1], t[2]));
	long long denominator;
	long long positions[3];
	for (denominator = min(multiple, 10000LL * 10000LL); denominator >= 0; --denominator) {
		for (int i = 0; i < 3; ++i) {
			positions[i] = 2 * multiple / t[i] % (2 * denominator);
			if (positions[i] > denominator) {
				positions[i] = 2 * denominator - positions[i];
			}
		}
		if (positions[0] == positions[1] && positions[1] == positions[2]) {
			break;
		}
	}
	long long divisor = gcd(multiple, denominator);
	multiple /= divisor;
	denominator /= divisor;
	cout << multiple << "/" << denominator << endl;
	return 0;
}
            
            
            
        
            
data9824