Codeforces Round #369 (Div.2)
はい。
http://codeforces.com/contest/711
A. Bus to Udayland
ざっくりと大意
・バスの着席状況はOが空席でXは着席されてる。ペアで座れるようなとこがあったら確保して++にする。なければNO。
Python2
n=int(raw_input()) l=[] ans=chk=0 for i in range(n): s=raw_input() if s[:2]=='OO' and chk==0: chk=1 s='++'+s[2:] elif s[3:]=='OO' and chk==0: chk=1 s=s[:3]+'++' l.append(s) if chk: print 'YES' for i in l: print i else: print 'NO'
OOが並んでるトコを1箇所だけ++にすれば大丈夫。replaceしたらOO|OOを++|++にしてしまって無駄にWAした。
B. Chris and Magic Square
ざっくりと大意
・空白のセル0に正の整数を入れて縦横斜めの和がすべて同じようにできるか?
Python2
def ed(x): print x exit() n=int(raw_input()) if n==1: ed(n) l=[] ans=-1 chk=f=0 for i in range(n): tmp=map(int,raw_input().split()) if i==0 and 0 in tmp: f=1 elif i==1 and f==1: t0,t1=sum(l[0]),sum(tmp) ans=t1-t0 if ans<1: ed(-1) l[0][l[0].index(0)]=ans chk=t1 elif i==0: chk=sum(tmp) elif (0 in tmp or sum(tmp)!=chk) and f==1: ed(-1) elif 0 in tmp and f==0: ans=chk-sum(tmp) if ans<1: ed(-1) tmp[tmp.index(0)]=ans f=1 l.append(tmp) for i in range(n): y=0 for j in range(n): y+=l[j][i] if y!=chk: ed(-1) x1=x2=0 for i in range(n): x1+=l[i][i] x2+=l[i][-1*i-1] if x1!=chk or x2!=chk: ed(-1) print ans
もう少し完結に書けそうな気がする。あと、0は一箇所のみであることがInputのi,jの情報で保証されてる気がする。
1行目にに0が含まれてたら2行目との差を仮に解として行内の0を置換、3行目以降は行の和で差があったら即時で-1。
1行目に0が含まれていなかったら2行目以降で0を探す。0を含んだ行があったら差を仮に解として行内の0を置換。0を含まない行で差があったら即時で-1。
縦は地道に2重forで各列の和を1行目の和と比較して差があったら即時-1。斜めはfor1回で同時に比較、差があったら即時-1。
縦横斜めのそれぞれの和が等しくて、仮の解が0より大きければ解を出力。と思ったら仮の解が0以下だったら即時-1でよかったことに気づいて該当箇所を書き直して再提出でAC。