結果
| 問題 |
No.229 線分上を往復する3つの動点の一致
|
| コンテスト | |
| ユーザー |
koyumeishi
|
| 提出日時 | 2015-06-20 15:11:02 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,788 bytes |
| コンパイル時間 | 894 ms |
| コンパイル使用メモリ | 81,612 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-07 15:18:56 |
| 合計ジャッジ時間 | 91,403 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 34 WA * 9 |
ソースコード
#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];
for(int k=1; k<=1000000; k++){
fraction t(B[0] * k, A[0]);
fraction tmp(A[1], B[1]);
tmp = tmp * t;
if(tmp.D == 1){
ans[i] = t;
break;
}
}
}
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