読者です 読者をやめる 読者になる 読者になる

AtCoder Beginner Contest 039

atcoder

はい。
http://abc039.contest.atcoder.jp
仕事の時間が合わなくて参加できなかったのは残念。。

A - 高橋直

python

a,b,c=map(int,raw_input().split())
print a*b*2+b*c*2+a*c*2

2面ずつある3種類の面を全て足すと6面で直方体の表面積になる。a * b * 2 + b * c * 2 + a * c * 2はちょっと不細工すぎるので(a * b + b * c + a * c)*2とかにするべきだった。

B - エージェント高橋君

python

print int(input()**.25)

はい。良くないことと知りつつやったのですが0.25で、sqrtを2回で4乗根を求めるのは誤差の恐れがあり非推奨解法だったようです。i * i * i * iをNになるまで回すほうが良いそうです。。

C - ピアニスト高橋君

python

k='WBWBWWBWBWBW'*3
s=raw_input()
a=k.index(s)
ans=['Do','','Re','','Mi','Fa','','So','','La','','Si','Do','']
print ans[a]

WWになる部分の間隔で鍵盤の状態が特定できる。

D - 画像処理高橋君

python

xy=[(1,0),(-1,0),(0,1),(0,-1)]
bs=[(-1,-1),(-1,1),(1,1),(1,-1)]

h,w=map(int,raw_input().split())
l=[]
H=range(h)
for i in H:
    l.append(raw_input())

ans=[['.']*w for i in H]
tenkai=[['.']*w for i in H]
news=[(0,0)]+xy+bs

def sol(y,x):
    for a,b in news:
        if 0<=y+a<h and 0<=x+b<w:
            if l[y+a][x+b]=='.':
                return 0
    return 1

for i in H:
    for j in range(w):
        if sol(i,j):
            ans[i][j]='#'

for i in H:
    for j in range(w):
        if ans[i][j]=='#':
            for a,b in news:
                if 0<=i+a<h and 0<=j+b<w:
                    tenkai[i+a][j+b]='#'
for i in H:
    if ''.join(tenkai[i])!=l[i]:
        print 'impossible'
        exit()
print 'possible'
for i in ans:
    print ''.join(i)

hwの全てのマスを#にして大丈夫なマスか、自身とその周り8マスが#であるかを見る。#に出来るだけして最後まで見終わったら周囲8マスを#にして最初の入力と一致するかを答え合わせをする。hwの各マスごとに周囲のマスを見るのを2回やっても大丈夫か心配したけど全然余裕だった。