C++の練習を兼ねて, AtCoder Beginner Contest 028 の 問題D (D – 乱数生成) を解いてみた.
■感想.
1. int型 で 提出したら, WAとなった, long long型 で 提出したら, AC版となった, 変数型に注意したいと思う(汗).
2. 時間を見つけて, 引き続き, 過去問を振り返っていきたいと思う.
本家のサイトABC 028解説をご覧下さい.
■C++版プログラム(問題D/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 28 29 30 31 |
#include <bits/stdc++.h> using namespace std; using LL = long long; int main(){ // 1. 入力情報. LL N, K; scanf("%lld %lld", &N, &K); // 2. 総数. LL t = N * N * N; // 3. 中央値が, K となるパターン. // 3-1. a < b < c で, b = K. LL p = 6 * (K - 1) * (N - K); // 3-2. a = b < c で, b = K. p += 3 * (N - K); // 3-3. a < b = c で, b = K. p += 3 * (K - 1); // 3-4. a = b = c で, b = K. p += 1; // 4. 出力. printf("%.20lf\n", (double)p / (double)t); 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 |
[入力例] 3 2 [出力例] 0.48148148148148145475 ※AtCoderテストケースより [入力例] 3 1 [出力例] 0.25925925925925924487 ※AtCoderテストケースより [入力例] 765 573 [出力例] 0.00147697396984624381 ※AtCoderテストケースより [入力例] 54321 12345 [出力例] 0.00001939669378633539 |
■参照サイト
AtCoder Beginner Contest 028