うーん、しょうもないミスばかり。
http://abc028.contest.atcoder.jp/assignments
A - テスト評価
100点満点のテストの結果がN点だった。
59点以下なら"Bad"、89点以下なら"Good"、99点以下なら"Great"、100点なら"Perfect"と答えよ。
愚直にif文で分岐。101要素の配列を作ってもいいかも?
N=input() if N<=59: print "Bad" elif N<=89: print "Good" elif N<=99: print "Great" else: print "Perfect"
B - 文字数カウント
A~Fで構成された文字列が与えられる。
各文字の登場回数を求めよ。
配列なりmap/hash/dictなりでカウントすればよい。
cnt={} S=raw_input().strip() for c in S: cnt[c] = cnt.get(c,0) + 1 print "%d %d %d %d %d %d" % (cnt.get('A',0),cnt.get('B',0),cnt.get('C',0),cnt.get('D',0),cnt.get('E',0),cnt.get('F',0))
C - 数を3つ選ぶマン
異なる5つの整数が与えられる。
うち3つを足してできる値のうち、大きい順に3番目のものを答えよ。
まず3つ足してできる値を列挙し、重複を取り除いて3番目を答えればよい。
import sets A=map(int,raw_input().strip().split(" ")) S = set() for x in range(5): for y in range(x): for z in range(y): S.add(A[x]+A[y]+A[z]) T=list(S) T.sort() print T[-3]
D - 乱数生成
整数N,Kが与えられる。
1~Nの整数のうちどれか1つを等確率で選ぶ、という処理を3回行う。
選んだ3値の中央値がKとなる確率を答えよ。
選ぶ数値はN^3通り。うち以下のケースで中央値がKとなる。
- 3値ともKとなるのは1通り。
- 2値がKで残りがK未満となる場合。何回目に選んだ数値がK未満になるかも踏まえると3*(K-1)通り。
- 2値がKで残りがKより大きい場合。何回目に選んだ数値がKより大きいかも踏まえると3*(N-K)通り。
- 3値がK未満・K・Kより大きいの場合。選んだ順番6通りも考慮すると6*(K-1)*(N-K)
N,K=map(int,raw_input().strip().split(" ")) total = N**3 yes = 1 + 3*(N-K) + 3*(K-1) + 6*(N-K)*(K-1) print "%.12f" % (yes*1.0/total)
まとめ
Bの1WAはA~Fのうち1箇所だけタイプミスで小文字にしてしまったこと…。