結果
問題 | No.456 Millions of Submits! |
ユーザー | hotpepsi |
提出日時 | 2016-12-08 22:11:14 |
言語 | C++11 (gcc 11.4.0) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,936 bytes |
コンパイル時間 | 735 ms |
コンパイル使用メモリ | 53,040 KB |
最終ジャッジ日時 | 2024-11-14 19:55:06 |
合計ジャッジ時間 | 4,660 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
main.cpp: In function ‘double binary_search(int, int, double)’: main.cpp:11:27: error: ‘pow’ was not declared in this scope 11 | ans = exp(pow(t, 1.0 / b)); | ^~~ main.cpp:11:23: error: ‘exp’ was not declared in this scope 11 | ans = exp(pow(t, 1.0 / b)); | ^~~ main.cpp:13:23: error: ‘pow’ was not declared in this scope 13 | ans = pow(t, 1.0 / a); | ^~~ main.cpp:17:53: error: ‘pow’ was not declared in this scope 17 | a /= i, b /= i, t = pow(t, 1.0 / i); | ^~~ main.cpp:24:50: error: ‘log’ was not declared in this scope; did you mean ‘long’? 24 | double x = 1, y = 1, z = log(mid); | ^~~ | long main.cpp: In function ‘int main(int, char**)’: main.cpp:77:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 77 | scanf("%d %d %lf", &a, &b, &t); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <iostream> #include <sstream> #include <algorithm> #include <cstdio> using namespace std; double binary_search(int a, int b, double t) { double ans; if (a == 0) { ans = exp(pow(t, 1.0 / b)); } else if (b == 0) { ans = pow(t, 1.0 / a); } else { for (int i = 2; i <= 10; ++i) { while (a % i == 0 && b % i == 0) { a /= i, b /= i, t = pow(t, 1.0 / i); } } double left = 1.0, right = max(2.0, t * 100), prev = 1.0e+10; for (int j = 0; j < 100; ++j) { double mid = (left + right) / 2; double x = 1, y = 1, z = log(mid); switch (a) { case 1: x = mid; break; case 2: x = mid * mid; break; case 3: x = mid * mid * mid; break; case 4: x = mid * mid; x *= x; break; case 5: x = mid * mid; x = mid * x * x; break; case 6: x = mid * mid; x = x * x * x; break; case 7: x = mid * mid; x = mid * x * x * x; break; case 8: x = mid * mid; x *= x; x *= x; break; case 9: x = mid * mid * mid; x = x * x * x; break; case 10: x = mid * mid * mid; x = mid * x * x * x; break; } switch (b) { case 1: y = z; break; case 2: y = z * z; break; case 3: y = z * z * z; break; case 4: y = z * z; y *= y; break; case 5: y = z * z; y = z * y * y; break; case 6: y = z * z; y = y * y * y; break; case 7: y = z * z; y = z * y * y * y; break; case 8: y = z * z; y *= y; y *= y; break; case 9: y = z * z * z; y = y * y * y; break; case 10: z *= z; y = z * z; y = z * y * y; break; } double n = x * y; if (n <= t) { left = mid; } else { right = mid; } if (n > prev) { if (n - prev < 2.0e-11) { break; } } else { if (prev - n < 2.0e-11) { break; } } prev = n; } ans = left; } return ans; } int main(int argc, char *argv[]) { int m; cin >> m; for (int i = 0; i < m; ++i) { int a, b; double t; scanf("%d %d %lf", &a, &b, &t); printf("%.10f\n", binary_search(a, b, t)); } return 0; }