2011-05-01から1ヶ月間の記事一覧

SRM506 Div1 Easy(250), Div2 Medium(500) SlimeXSlimesCity

SlimeXSlimesCityある街aの名前を最終的な街の名前にしようとするときは、なるべく小さい街からaに合併していくのが最善。全ての街について最終的な街の名前をその街の名前にできるか調べる。 #include <vector> #include <algorithm> using namespace std; class SlimeXSlimesC</algorithm></vector>…

SRM506

Easy (250) 243.07 Medium (600) 0 Hard (1000) 0 Challenge 0 結果 1728 → 1784

Google Code Jam 2011 Qualification Round D. GoroSort

GCJ

GoroSort揃っている数字を押さえて机を叩くという戦略を考えると、n個の間違いがあった時、期待値はn回。サンプル最後のような叩き方もできるけど、揃っていない数字をどのように分けても合計はn回になるはず。 for t in range(input()): input() C = map(in…

Google Code Jam 2011 Qualification Round C. Candy Splitting

GCJ

Candy SplittingPatrickの計算はxor。全ての飴の価値のxorが0である場合かつこの場合に限り、2つに分けた飴それぞれのxorが等しくなる。この時どのように分けても良いので、Patrickには1番安い飴を1つあげれば良い。Patrick……(´;ω;`)ブワッ for t in rang…

Google Code Jam 2011 Qualification Round B. Magicka

GCJ

Magicka某マギカではない。問題文の通りに実装。10が100になるなら実行時間だけ気にすれば良いけど、Smallで1がLargeで2以上になるのはバグが入りそうで怖い。 def tostr(e): r = "[" for c in e: r += "%s, "%c if len(e)>0: r = r[:-2] r += "]" return r …

Google Code Jam 2011 Qualification Round A. Bot Trust

GCJ

Bot Trustちょっと面倒だが、指示されたボタンに向かって相手がボタンを押すまで待機、を1秒ごとにシミュレーション。 # coding: utf-8 T = input() for t in range(T): line = raw_input().split() op = [] N = int(line[0]) for i in range(N): op += [(l…

Google Code Jam 2011 Qualification Round

GCJ

時間はかかったけど、全問正解で通過(`・ω・´)

SRM505 Div1 Easy(300), Div2 Hard(900) RectangleArea

RectangleAreaDiv2だと900。このパターンは初めて見た。R0を決めると全てのRi,Cjが定まるとき、RiはR0に比例しCjはR0に反比例するので打ち消し合って面積が求められる。 どれか1つを決めると他が定まるRi,Cjを1つの組として、グループ分けする。あるRiとCj…

SRM505

不参加。

SRM493 Div2 Hard(1000) CrouchingAmoebas

CrouchingAmoebasスーパーアメーバーデストロイヤーを撃つ場所が決まっているなら、範囲外のアメーバーを近い順に範囲内に入れていけば良い。デストロイヤーは移動後のアメーバーが上端と左端に接する位置のみを考えれば充分。 #include <vector> #include <algorithm> using na</algorithm></vector>…

SRM499 Div2 Hard(950) PalindromeGame

PalindromeGameAA'とBB'が回文ならば、ABB'A'もBAA'B'も回文となる。回文になる組み合わせを点数の高いものから貪欲に取っていく。その後、単体で回文になる文字列があれば中心に加える。中心を先に選ぶと、{aba, aba}のような入力で間違える。 #include <string> #i</string>…

SRM495 Div2 Hard(1000) HexagonPuzzle

HexagonPuzzleトークンを移動可能なマスごとにグループに分ける。あるグループのマス数をcとするとc!の配置が考えられる。実際に可能な配置はc!/2。最後の2枚を除いては好きな位置に配置できるが、最後の2枚の位置を入れ替えることはできない。 #include <string> </string>…