結果
| 問題 |
No.195 フィボナッチ数列の理解(2)
|
| コンテスト | |
| ユーザー |
sugim48
|
| 提出日時 | 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;
}
sugim48