yukicoder 問題 "乱数サイ"
A問題のWriterをしておりました、Ruteです。
今回はA問題の作問を担当させて頂きました。
それでは早速問題から振り返っていきましょう。
問題文:
一般的に乱数サイとは
0から9までの数字がちょうど2回ずつ現れるようになっているサイコロのことをいいます。
今回は、からまでの整数がちょうど回ずつ現れるようになっているサイコロを考えます。
(ただし、それぞれの整数が等確率で出るものとします)
このサイコロの出目の期待値を求めて下さい。
この問題の解法は2つあります。
解法1:
ans = 0とします
(0,N)で以下のループを回します。(変数をiとします)
ここで、ansにを足し続けます。
本来は回足すので分子が倍、さらに分母もとなる必要がありますが、分子分母のの部分が消えるので、事実上は上の式を足し続ければよいです。
計算量はでしょう。
Python3のコードです:
- N,K = map(int,input().split())
ans = 0
for i in range(0,N+1):
ans += i/(N+1)
print(ans)
解法2:
で、Kの数を増やしたとき期待値がどのようになるかを考えてみましょう。
(解法2の計算式では分子がのものは考えないことにします)
= =
= =
= =
既に気づいた方もいるかも知れませんがを変更しても期待値の総和は変化していないのです。
では次に、で、Nの数を増やしたとき期待値がどのようになるかを考えてみましょう。
= =
= =
= =
実は、答えは任意のに対しての値にかかわらず一意に定まることがわかります。よって答えはとなり、計算量で計算することが可能です!
Python3のコードです:
- N,K = map(int,input().split())
- print(N/2)
(帰着させるとからまでのサイコロを1個振ったときの期待値を求めることになります)
(この解法を思いついた方は果たして何人いるのでしょうか....)
以上、A問題の解説でした。
難易度について、また問題の感想についてコメントなどでぜひ教えて下さい!
(コメントの一部を、Twitterで匿名で紹介するかもしれません。)