結果
| 問題 |
No.229 線分上を往復する3つの動点の一致
|
| コンテスト | |
| ユーザー |
koyumeishi
|
| 提出日時 | 2015-06-20 15:50:06 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,765 bytes |
| コンパイル時間 | 795 ms |
| コンパイル使用メモリ | 81,736 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-07 15:19:04 |
| 合計ジャッジ時間 | 2,089 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 43 |
ソースコード
#include <iostream>
#include <vector>
#include <cstdio>
#include <sstream>
#include <map>
#include <string>
#include <algorithm>
#include <queue>
#include <cmath>
#include <set>
using namespace std;
long long gcd(long long a, long long b){
if(b==0) return a;
return gcd(b, a%b);
}
long long lcm(long long a, long long b){
if(a<b) swap(a,b);
if(b==1) return a;
return a * (b/gcd(a,b));
}
struct fraction{
long long N;
long long D;
fraction(long long n, long long d){
N = n;
D = d;
long long g = gcd(N,D);
N /= g;
D /= g;
}
fraction(){
N = 1LL<<50;
D = 1;
}
fraction operator*(fraction x){
fraction tmp(N,D);
long long g = gcd(tmp.N, x.D);
tmp.N /= g;
x.D /= g;
g = gcd(x.N, tmp.D);
x.N /= g;
tmp.D /= g;
return fraction(tmp.N * x.N, tmp.D * x.D);
}
bool operator<(const fraction& x) const{
long long l = lcm(this->D, x.D);
return (this->N * (l/this->D)) < (x.N * (l/x.D));
}
void print(){
cerr << N << "/" << D << endl;
}
};
int main(){
vector<long long> T(3);
for(int i=0; i<3; i++){
cin >> T[i];
}
vector<fraction> ans(4);
for(int i=0; i<4; i++){
vector<long long> A(2), B(2);
vector<long long> N(2), D(2);
vector<long long> g(2);
A[0] = T[1] + T[0] * ((i&1)?1:-1);
B[0] = T[1] * T[0];
g[0] = gcd(A[0], B[0]);
A[0] /= g[0];
B[0] /= g[0];
A[1] = T[2] + T[1] * ((i&2)?1:-1);
B[1] = T[2] * T[1];
g[1] = gcd(A[1], B[1]);
A[1] /= g[1];
B[1] /= g[1];
fraction x(B[0], A[0]);
fraction y(A[1], B[1]);
fraction z = x*y;
//z.print();
long long k = z.D;
ans[i] = fraction(B[0] * k, A[0]);
}
sort(ans.begin(), ans.end());
cout << ans[0].N << "/" << ans[0].D << endl;
/*
for(int i=0; i<4; i++){
cerr << ans[i].N << "/" << ans[i].D << endl;
}
*/
return 0;
}
koyumeishi