C++の練習を兼ねて, AtCoder Regular Contest 054 の 問題A (動く歩道) ~ 問題B (ムーアの法則) を解いてみた.
■感想.
1. 問題B は 久しぶりに指数関数の微分を行ったので, 手こずったものの, 何とかAC版に到達できた.
2. 時間を見つけて, 引き続き, 過去問を振り返っていきたいと思う.
本家のサイトAtCoder Regular Contest 054 解説をご覧下さい.
■C++版プログラム(問題A/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <bits/stdc++.h> using namespace std; int main(){ // 1. 入力情報. double L, X, Y, S, D; scanf("%lf %lf %lf %lf %lf", &L, &X, &Y, &S, &D); // 2. 出口に辿り着く時間は? // 2-1. 時計回り. double d1 = D - S; if(d1 < 0.0) d1 += L; double t1 = d1 / (X + Y); // 2-2. 反時計回り. // ※ Y > X のみ計算. double d2 = S - D; if(d2 < 0.0) d2 += L; double t2 = 202020202020202020.0; if(Y > X) t2 = min(t2, d2 / (Y - X)); // 3. 出力. printf("%.10lf\n", min(t1, t2)); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[入力例] 6 2 3 1 5 [出力例] 0.8000000000 ※AtCoderのテストケースより [入力例] 6 2 10 1 5 [出力例] 0.2500000000 ※AtCoderのテストケースより [入力例] 6 3 1 5 3 [出力例] 1.0000000000 ※AtCoderのテストケースより [入力例] 10 7 7 6 0 [出力例] 0.2857142857 ※AtCoderのテストケースより [入力例] 100 20 25 20 10 [出力例] 2.0000000000 |
■C++版プログラム(問題B/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <bits/stdc++.h> using namespace std; int main(){ // 1. 入力情報. double P; scanf("%lf", &P); // 2. 計算が終わるまでの最短の時間は? // -> 計算開始が, x年だったとすると, // -> f(x) = x + P / {2 の (x / 1.5)乗} // -> f'(x) = 1 - (log2 / 1.5) * P / {2 の (x / 1.5)乗} // -> f'(x) = 0 となる x は, x = (1.5 / log2) * log(P * (log2 / 1.5)) double x = (1.5 / log(2.0)) * log(P / 1.5 * log(2.0)); bool ok = (P / 1.5 * log(2.0) < 1.0); double ans = ok ? P : x + P / pow(2.0, x / 1.5); // 3. 出力. printf("%.10lf\n", ans); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
[入力例] 3.0000 [出力例] 2.8708930019 ※AtCoderのテストケースより [入力例] 0.0400 [出力例] 0.0400000000 ※AtCoderのテストケースより [入力例] 1000000000000000000.0000 [出力例] 90.1855078128 ※AtCoderのテストケースより [入力例] 1.0397 [出力例] 1.0397000000 [入力例] 1.0398 [出力例] 1.0398000000 [入力例] 2020.1007 [出力例] 16.9637664953 |
■参照サイト
AtCoder Regular Contest 054