AtCoder Beginner Contest 028 参加記

はい。 oooo(0/0)
http://abc028.contest.atcoder.jp
珍しく全完したというか難易度が低い回だった。ですけどどうしようもないようなミスで無駄にWAしてますけど。。。。

A - テスト評価

python

n=int(raw_input())
if n==100:
    print 'Perfect'
elif n>=90:
    print 'Great'
elif n>=60:
    print 'Good'
else:
    print 'Bad'

特に意味は無いというかやってることは同じで1行にしたりも出来る。 n=int(raw_input()); print 'Perfect' if n==100 else 'Great' if n>=90 else 'Good' if n>=60 else 'Bad'
if文とかで条件分岐を間違えなければ大丈夫なはずの問題。

B - 文字数カウント

python

n=raw_input()
ans=[0]*6
for i in n:
    ans[ord(i)-65]+=1
for i in ans:
    print i,

入力されるデータがカウント対象の6文字しか使っていないことが保証されているし、普通に数えれば普通に大丈夫だと思う。

C - 数を3つ選ぶマン

python

l=map(int,raw_input().split())
ans=set()
for i in range(3):
    for j in range(i+1,4):
        for k in range(j+1,5):
            ans.add(l[i]+l[j]+l[k])
ans=list(ans)
ans.sort()
print ans[-3]

3重ループで全パターン見なくても良かったらしい。なんとなくそんな気もしてたけど自信がなかったので確実な方で提出した。

D - 乱数生成

python

n,k=map(int,raw_input().split())
m=n**3
 
#k,k,k
chk=1
 
#k-1,k,k+1
if k-1>0 and k+1<=n:
    chk+=((k-1)*(n-k))*6
#k,k,k+1
if k+1<=n:
    chk+=(n-k)*3
 
#k-1,k,k
if k-1>0:
    chk+=(k-1)*3
print chk*1.0/m

はい。Kが中央値になるのがどのような3つの数が選ばれた時かを数えて、それと全組み合わせのn3とでみればKが中央値になる出現確率になる。

n,k=map(int,raw_input().split());print(((k-1)*(n-k)*6)+((n-k)*3)+((k-1)*3)+1)*1./n**3
無理やり1行にしてるけど、この式ももう少し綺麗に出来る気がする。