A問題 Changing a Character
1 2 3 4 5 6 7 8 9 10 |
a,b = map(int, input().split()) s = input() ans = [] for i in range(a): if i==b-1: ans.append(s[b-1].lower()) else: ans.append(s[i]) print(''.join(ans)) |
C問題
方針
・すぬけ君がゲームに勝つ確率を、配列によってサイコロの目ごとに記録する
・得点を変数で管理し、k以上となるまでコイントスを繰り返す
・サイコロの目ごとに記録した勝率を合計し、n(サイコロの目の数)で割り算する
——–ここから先は間違っているかもしれません。——–
・コイントスによって表が出る事象と裏がでる事象は排反なのですぬけ君の勝敗も排反となる。
・排反な事象に関する確率を求めるには和事象の公式を用いる
→すぬけ君が勝つ確率を求めるには、サイコロの目ごとの勝つ確率を合計すれば良い。
→すぬけ君が負けた場合の確立を求めなくてもよいのはすぬけ君が勝つ事象とすぬけ君が負ける事象は排反(同時には起こらない)であるため。
→すぬけ君が勝つ事象とすぬけ君が負ける事象を合計すると全体の場合の数が求められる。
解答
コード・コメント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#入力 n,k = map(int, input().split()) #得点を0で初期化 point = 0 #1回目のサイコロの目ごとに、勝つ確率を管理する配列 probability_list = [] #1からnまで繰り返す(サイコロの目の数) for i in range(1,n+1): #サイコロの目をpointに記録 point = i #pointがk以上になるまでに、サイコロを振った数を記録する変数を0で初期化 count = 0 #pointがk-1以下である限り繰り返す while point < k: #サイコロを振った数に1を加える count+=1 #pointを2倍する point*=2 #pointがk以上になったら、0.5(2分の1)をcountの数だけ累乗した数をnで割り算することで勝つ確率を求める probability=0.5**count/n #サイコロの目iが出た場合の勝つ確率を配列に記録する probability_list.append(probability) #配列には、サイコロの目iごとの勝つ確率が記録されているので、その合計値を出力 print(sum(probability_list)) |
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
n,k = map(int, input().split()) point = 0 probability_list = [] for i in range(1,n+1): point = i count = 0 while point < k: count+=1 point*=2 probability=0.5**count/n probability_list.append(probability) print(sum(probability_list)) |
参考
・排反な事象について
すぬけ君が勝った時と負けた時を含むすべての組み合わせから、すぬけ君が買った場合にのみ絞って確率を求めなくても良いことが気になりました。
「排反事象」の全てが分かる: 「排反」「排反でない」の違いをサイコロ・トランプを使って徹底解説! – 文系受験数学ラボ (dsuke-gokaku.com)
その他
他の解説記事一覧
コメント