結果
問題 | No.195 フィボナッチ数列の理解(2) |
ユーザー |
![]() |
提出日時 | 2015-04-27 00:27:37 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 1,887 bytes |
コンパイル時間 | 1,019 ms |
コンパイル使用メモリ | 100,040 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-05 03:19:03 |
合計ジャッジ時間 | 1,796 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 22 |
ソースコード
#define _USE_MATH_DEFINES #include <algorithm> #include <cstdio> #include <functional> #include <iostream> #include <cfloat> #include <climits> #include <cstring> #include <cmath> #include <fstream> #include <map> #include <queue> #include <random> #include <set> #include <sstream> #include <stack> #include <string> #include <time.h> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> i_i; typedef pair<ll, int> ll_i; typedef pair<double, int> d_i; typedef pair<ll, ll> ll_ll; typedef pair<double, double> d_d; struct edge { int u, v; ll w; }; int INF = INT_MAX / 10; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int main() { vector<ll> fib(51); fib[0] = 1; fib[1] = 0; for (int i = 2; i <= 50; i++) fib[i] = fib[i - 1] + fib[i - 2]; vector<ll> v(3); cin >> v[0] >> v[1] >> v[2]; sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); int n = v.size(); if (n == 1) v.insert(v.begin(), 1); ll_ll ans(LLONG_MAX, LLONG_MAX); for (int i = 0; i < 50; i++) for (int j = i + 1; j < 50; j++) for (int k = j + 1; k < 50; k++) { ll a = fib[i], b = fib[i + 1]; ll c = fib[j], d = fib[j + 1]; ll det = a * d - b * c; ll z = v[0] * d - v[1] * b; if (z % det) continue; ll x = z / det; det = b * c - d * a; z = v[0] * c - v[1] * a; if (z % det) continue; ll y = z / det; if (n == 3 && (double)fib[k] * x + fib[k + 1] * y != v[2]) continue; if (x >= 1 && y >= 1) ans = min(ans, ll_ll(x, y)); } if (ans.first == LLONG_MAX) cout << -1 << endl; else cout << ans.first << ' ' << ans.second << endl; }