結果
問題 | No.195 フィボナッチ数列の理解(2) |
ユーザー |
![]() |
提出日時 | 2015-04-26 23:38:25 |
言語 | C++11 (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,116 bytes |
コンパイル時間 | 1,308 ms |
コンパイル使用メモリ | 165,912 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-05 02:48:45 |
合計ジャッジ時間 | 5,043 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 18 WA * 4 |
ソースコード
#include "bits/stdc++.h"using namespace std;#define T 50#define MAX 1000000001long long A[T];long long B[T];long long ansA = MAX;long long ansB = MAX;int main() {A[0] = 1;B[1] = 1;for (int i = 2; i < T; i++){A[i] = A[i - 1] + A[i - 2];B[i] = B[i - 1] + B[i - 2];}vector<long long> num(3);cin >> num[0] >> num[1] >> num[2];sort(num.begin(), num.end());if (num[0] == num[1] && num[1] == num[2]){ansA = 1;ansB = num[0];}if (num[0] == num[1] || num[1] == num[2]){int tempA = num[0];int tempB = num[2];if (tempA > tempB) swap(tempA, tempB);if (ansA > tempA || (ansA == tempA && ansB > tempB)){ansA = tempA;ansB = tempB;}}for (int i = 0; i < T; i++){if (A[i] + B[i] > num[0]) continue;for (int j = 0; j < T; j++){if (A[j] + B[j] > num[1]) continue;for (int k = 0; k < T; k++){if (A[k] + B[k] > num[2]) continue;if (A[k] == 0 || B[k] == 0) continue;double lowa = 0;double higha = num[2] / A[k] + 1;if (lowa > higha) continue;for (int l = 0; l < 100; l++){double a1 = (lowa + lowa + higha) / 3;double a2 = (lowa + higha + higha) / 3;double b1 = (num[2] - a1 * A[k]) / B[k];double b2 = (num[2] - a2 * A[k]) / B[k];double diff1 = 0;double diff2 = 0;diff1 += abs(num[0] - (a1 * A[i] + b1 * B[i]));diff1 += abs(num[1] - (a1 * A[j] + b1 * B[j]));diff2 += abs(num[0] - (a2 * A[i] + b2 * B[i]));diff2 += abs(num[1] - (a2 * A[j] + b2 * B[j]));if (diff1 < diff2) higha = a2;else lowa = a1;}int ta = (int)(lowa + 0.5);for (int a = max(ta - 100, 1); a <= ta + 100; a++){int b = (num[2] - a * A[k]) / B[k];if (b <= 0) continue;if (num[0] != a * A[i] + b * B[i]) continue;if (num[1] != a * A[j] + b * B[j]) continue;if (num[2] != a * A[k] + b * B[k]) continue;if (a <= 0) continue;if (ansA > a || (ansA == a && ansB > b)){ansA = a;ansB = b;}}}}}if (ansA == MAX) cout << -1 << endl;else cout << ansA << " " << ansB << endl;}