結果
| 問題 |
No.456 Millions of Submits!
|
| コンテスト | |
| ユーザー |
hotpepsi
|
| 提出日時 | 2016-12-08 22:11:14 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.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;
}
hotpepsi