AtCoder Beginner Contest 020

はい。
https://beta.atcoder.jp/contests/abc020

A - クイズ

Python2

print ['','ABC','chokudai'][int(raw_input())]

1と2で。

B - 足し算

Python2

print int(''.join(map(str,raw_input().split())))*2

strを結合してintにキャストして。多分、Bを10で割る、100で割るとかで解が0になるとこを確認してソレに合わせてAを10x倍してとかでも出来ないことはないと思うけど面倒そう。

C - 壁抜け

Python3

mod=1000000007
xy=[(1,0),(-1,0),(0,1),(0,-1)]
 
h,w,t=map(int,input().split())
s=[]
for i in range(h):
    a=input()
    s.append(a)
    if "S" in a: x=(i,a.index("S"))
    if "G" in a: y=(i,a.index("G"))
p,q=0,t
for i in range(100):
    c=[[mod for i in range(w)] for j in range(h)]
    c[x[0]][x[1]]=0
    c[y[0]][y[1]]=0
    now=set()
    now.add(x)
    k=(p+q)//2
    while len(now):
        d,e=now.pop()
        for i,j in xy:
            if 0<=i+d<h and 0<=j+e<w:
                if s[i+d][j+e]=="#":
                    if c[i+d][j+e]>c[d][e]+k and t>c[d][e]+k:
                        c[i+d][j+e]=c[d][e]+k
                        now.add(((i+d),(j+e)))
                elif s[i+d][j+e]=="." :
                    if c[i+d][j+e]>c[d][e]+1 and t>c[d][e]+1:
                        c[i+d][j+e]=c[d][e]+1
                        now.add(((i+d),(j+e)))
                else:
                    if c[i+d][j+e]<=c[d][e]+1<=t:
                        c[i+d][j+e]=c[d][e]+1
    if c[y[0]][y[1]]:p=k
    else: q=k
    if q-p<2: break

print(p)

解説も読んで問題文もよく読んだ。H,Wがかなり狭くて、マス移動も必ず黒マスを通る必要があるようにされてるらしいので結構適当に計算してもなんとかなる模様。xを最小0、最大tとして二分探索するような値をxに仮定してGにたどり着ければ最小値を更新、辿りつけなければ最大値を更新して、マス移動は幅優先かな?コレしか書き方分かりません。けどなんとかなりましたね。