結果
| 問題 |
No.229 線分上を往復する3つの動点の一致
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-12-13 01:01:05 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,100 bytes |
| コンパイル時間 | 427 ms |
| コンパイル使用メモリ | 57,724 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-29 18:23:51 |
| 合計ジャッジ時間 | 1,956 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 43 |
ソースコード
#include <iostream>
#include <utility>
#define REP(i,s,n) for(int i=(int)(s);i<(int)(n);i++)
using namespace std;
typedef long long int ll;
typedef pair<ll, ll> PL;
ll gcd(ll x, ll y) {
return y == 0 ? x : gcd(y, x % y);
}
PL add(PL x, PL y) {
PL w = PL(x.first * y.second + x.second * y.first, x.second * y.second);
ll g = gcd(w.first, w.second);
w.first /= g;
w.second /= g;
return w;
}
PL inv(PL x) {
return x.first > 0 ? PL(x.second, x.first) : PL(-x.second, -x.first);
}
PL fr_lcm(PL x, PL y) {
ll numer = x.first / gcd(x.first, y.first) * y.first;
ll denom = gcd(x.second, y.second);
return PL(numer, denom);
}
int main(void){
ll t1, t2, t3;
cin >> t1 >> t2 >> t3;
PL mi = PL(1e16, 1);
REP(i, 0, 2) {
REP(j, 0, 2) {
PL b = PL(1, t1);
PL d = PL(-1 + 2 * i, t2);
PL f = PL(-1 + 2 * j, t3);
PL b_d = inv(add(b, d));
PL b_f = inv(add(b, f));
PL res = fr_lcm(b_d, b_f);
if ((double)mi.first / mi.second > (double)res.first / res.second) {
mi = res;
}
}
}
cout << mi.first << "/" << mi.second << endl;
}