2011-10-08から1日間の記事一覧

Google Code Jam Japan 2011 決勝 E. 無限庭園 (Small)

GCJ

無限庭園0,0から10,10に行くために、1000,1000を経由するような大きな遠回りが無いと仮定して、迷路を実際に作って、最短路探索。一旦、通路の中央を通る経路で最短路を求め、同じ向きに2回曲がっているごとに、最短距離から2を引く。最短経路が2種類あった…

Google Code Jam Japan 2011 決勝 D. クローゼットルーム (Small)

GCJ

クローゼットルームSmallならばクローゼットの置き方を全て試せる。 # coding: utf-8 import copy # 全てのクローゼットに到達可能かチェック def check(M,C): T = copy.deepcopy(M) # 入り口から到達可能なマスをDにする while True: up = False for y in r…

Google Code Jam Japan 2011 決勝 C. ワイルドカード (Small)

GCJ

ワイルドカード答えは、Aのいくつかの部分文字列で*を挟んだ形になっている。全て生成して、Bにマッチしないかどうか調べる。 import re def solve(A,B): n = len(A) ans = A for i in xrange(1<<n): p = "".join(A[i] if i>>j&1 else "*" for j in range(n)) p = re.sub("\*+","*",p) i</n):>…

Google Code Jam Japan 2011 決勝 B. バクテリアの増殖 (Small)

GCJ

バクテリアの増殖SmallではBは2以下、1回目は普通に計算するとバクテリアの個数は10進数で高々3000桁。AA mod CはO(log A)で計算できる。参考。Pythonならpow関数に任せれば良い。 def solve(A,B,C): if B==1: return A**A%C else: A = A**A return pow(A,A,…

Google Code Jam Japan 2011 決勝 A. アンテナ修復

GCJ

アンテナ修復並べ終わった後のエレメントの長さを、E1, E2, ……, EKとすると、面積は、 なるべく大きい数同士が隣の方が得だろうと、1 3 5 8 9 7 6 4 2という風に並べたら、正解した。 import math def solve(K,E): E = sorted(E)[::-1] T = [E[i] for i in r…

Google Code Jam Japan 2011 決勝

GCJ

問題を一通り読んでLargeが全く分からなかったので、Small狙いで解いていったら、7位キタ━━━━━━(゚∀゚)━━━━━━ !!