結果
| 問題 |
No.751 Frac #2
|
| コンテスト | |
| ユーザー |
どらら
|
| 提出日時 | 2018-11-09 22:28:45 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 1,406 bytes |
| コンパイル時間 | 1,691 ms |
| コンパイル使用メモリ | 171,196 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-21 06:19:36 |
| 合計ジャッジ時間 | 2,625 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 36 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,n) for(int i=(a); i<(int)(n); i++)
#define rep(i,n) REP(i,0,n)
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)
#define ALLOF(c) (c).begin(), (c).end()
typedef long long ll;
typedef unsigned long long ull;
ll gcd(ll a, ll b){return (b==0?a:gcd(b,a%b));}
pair<ll,ll> solve(const vector<ll>& v, const vector<ll>& w){
if(v.size()==0){
return make_pair(1LL,1LL);
}
if(v.size()==1){
ll g = gcd(v[0], w[0]);
return make_pair(v[0]/g,w[0]/g);
}
ll x = v[v.size()-1] * w[0];
vector<ll> vv, ww;
rep(i,v.size()-2) vv.push_back(v[i]);
vv[0] *= w[1];
REP(i,2,w.size()) ww.push_back(w[i]);
ww[0] *= v[v.size()-2];
pair<ll,ll> ret = solve(vv, ww);
ret.second *= x;
ll g = gcd(ret.first, ret.second);
return make_pair(ret.first/g, ret.second/g);
}
int main(){
int n, m;
vector<ll> v, w;
cin >> n;
rep(i,n){
ll a;
cin >> a;
v.push_back(a);
}
cin >> m;
rep(i,m){
ll a;
cin >> a;
w.push_back(a);
}
if(n<11) rep(i,11-n) v.push_back(1);
if(m<11) rep(i,11-m) w.push_back(1);
pair<ll,ll> ret = solve(v,w);
if(ret.first < 0 && ret.second < 0){
ret.first *= -1;
ret.second *= -1;
}
else if(ret.second < 0){
ret.first *= -1;
ret.second *= -1;
}
cout << ret.first << " " << ret.second << endl;
return 0;
}
どらら