2012-07-01から1ヶ月間の記事一覧

ARC#006 D - アルファベット探し

アルファベット探し異なる文字が接することは無いので、接しているoを繋げていくと、文字ごとに分けられる。あとは文字ごとにAかBかCかを調べる。最左のピクセルと最右のピクセルの位置から何倍に拡大されているかがわかる。各文字はピクセル数が異なるので…

ARC#006 C - 積み重ね

積み重ね貪欲。置くことができて最も軽い箱の上に置くのが最善。ちなみに、Pythonには for a in A: XXX else: YYY という記法があって、ループを最後まで実行した(breakしなかった)場合にだけ、YYYが実行される。 T = [] for i in range(input()): x = inp…

ARC#006 B - あみだくじ

あみだくじ[0, 1, 2, 3, …, N]という配列を用意しておいて-が出てくる度に、その位置の要素を交換すれば良い。 N,L = map(int,raw_input().split()) T = range(N) for i in range(L): for j,x in enumerate(raw_input()[1::2]): if x=="-": T[j],T[j+1] = T[…

ARC#006 A - 宝くじ

宝くじ def r(): return map(int,raw_input().split()) E=r() B=input() L=r() t=len([x for x in L if x in E]) if t==6: print 1 elif t==5 and B in L: print 2 elif t==5: print 3 elif t==4: print 4 elif t==3: print 5 else: print 0

SRM550 Div2 Hard(1000) TopView

TopView文字aのx軸方向とy軸方向の範囲内に、文字bがあるならば、bはaの上にある。bがaの上にある場合に、aからbに辺を張ったグラフを作り、トポロジカルソートすると順番が得られる。 #include <string> #include <vector> using namespace std; // 辞書順最小になるように</vector></string>…

SRM550 Div2 Easy(250)

EasyConversionMachineoriginalWordをfinalWordに書き換えて、残り回数が偶数なら可能。 #include <string> using namespace std; class EasyConversionMachine{public: string isItPossible( string originalWord, string finalWord, int k ) { for ( int i=0; i<(i</string>…

SRM550 Div1 Medium(500) CheckerExpansion

CheckerExpansionこんな感じ。 ............ ............ ............ ............ ............ ............ .....B...... ....A.B..... ...B........ ..A.B....... .B...B...B.. A.B.A.B.A.B.パスカルの三角形 ............ ............ ............…

SRM550 Div1 Easy(300), Div2 Medium(550) RotatingBot

RotatingBot可能な動きなら、動く範囲は広くない。実際に動かして確かめる。 #include <vector> using namespace std; class RotatingBot{public: int minArea( vector <int> moves ) { int n = (int)moves.size(); int dx[] = { 1, 0, -1, 0 }; int dy[] = { 0, -1, 0, 1</int></vector>…

SRM550

Easy (300) 182.33 Medium (500) 321.82 Hard (850) 0 Challenge 0 結果 30位 2158→2242レッド復帰キタ━━━━━━(゚∀゚)━━━━━━ !!

SRM549 Div1 Medium(600) MagicalHats

MagicalHats魔法使いはコインの位置を自由に決められるので、プレイヤーがn枚のコインを獲得できるならば、小さい方から順にn枚になる。プレイヤーが帽子の位置を指定し、魔法使いがその帽子の中にコインがあるかどうかを決める、というゲームだと考える。条…

SRM549 Div2 Easy(250) BallAndHats

BallAndHatsnumSwapsが0の場合、最初の位置がそのまま答え。それ以外の場合、最初の位置+numSwapsが奇数ならば、ボールは中央。偶数ならば、左と右が等確率。 #include <string> using namespace std; class BallAndHats{public: int getHat( string hats, int numSw</string>…

SRM549 Div1 Easy(250), Div2 Medium(500) PointyWizardHats

PointyWizardHats2部グラフの最大マッチングに帰着できる。1個目の条件は、上の円錐のほうが頂角が小さいということ。 #include <vector> using namespace std; // 最大流 int maxflow( vector<vector<int> > edge, int s=0, int t=-1 ) { int n = (int)edge.size(); if ( t<0 ) </vector<int></vector>…

SRM549

Easy (250) 216.44 Medium (600) 0 Hard (900) 0 Challenge +50 結果 28位 2074→2158250でtopRadius[i]<=bottomRadius[j]等号を付けている人を見つけて、50点獲得。たぶん過去最高順位(・∀・)

ACM-ICPC 2012 国内予選 Problem E 鎖中経路

鎖中経路※コンテスト本番の入力が通るかどうかは未確認サンプルの図を見ると、最短経路は、両端の円の中心といくつかの円の交点を直線で結べば得られることがわかる。一方の円の中心からそれぞれの交点に到達するまでの最短経路を覚えておき、動的計画法。交…

ACM-ICPC 2012 国内予選 Problem D 鉄道乗り継ぎ

鉄道乗り継ぎ各会社ごとに全点対間最短路を求め、運賃を計算する。この運賃を使って、出発地から目的地の最安運賃を求める。 #include <iostream> #include <vector> #include <queue> #include <utility> using namespace std; int main() { const int INF = 99999999; while ( true ) { int n</utility></queue></vector></iostream>…

ACM-ICPC 2012 国内予選 Problem C 偏りのあるサイコロ

偏りのあるサイコロ #include <iostream> #include <vector> #include <cstdlib> using namespace std; // サイコロDを回転したサイコロを返す vector<int> spin( vector<int> D, int dir ) { vector<int> R; int T[4][6] = { { 3, 0, 2, 5, 4, 1 }, { 4, 1, 0, 3, 5, 2 }, { 1, 5, 2, 0, 4, 3 }, { 2, </int></int></int></cstdlib></vector></iostream>…

ACM-ICPC 2012 国内予選 Problem B 繰り返す10進数

繰り返す10進数 #include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; int next( int a, int L ) { vector<int> T(L); for ( int i=0; i</int></algorithm></set></vector></iostream>

ACM-ICPC 2012 国内予選 Problem A ミレニアム

ミレニアム #include <iostream> using namespace std; int main() { int n; cin >> n; for ( int i=0; i<n; i++ ) { int Y, M, D; cin>>Y>>M>>D; int ans = 0; while (Y<1000 ) { D++; if ( Y%3==0 && D>20 || Y%3!=0 && M%2==0 && D>19 || Y%3!=0 && M%2!=0 && D>20 ) { D = 1; M++; } if ( M>10 )</n;></iostream>…

SRM548 Div2 Easy(250) KingdomAndDucks

KingdomAndDucks #include <vector> #include <set> #include <algorithm> using namespace std; class KingdomAndDucks{public: int minDucks( vector <int> duckTypes ) { vector<int> num(51); for ( int i=0; i<(int)duckTypes.size(); i++ ) num[duckTypes[i]]++; return int(set<int>(duckType</int></int></int></algorithm></set></vector>…

SRM548 Div1 Medium(450) KingdomAndDice

KingdomAndDice1番目のダイスと2番目のダイスのラベルのN*N通りの組合わせのうち、1番目ダイスのほうが大きいもの個数をp個とすると、勝率はp/(N*N)。pをN*N/2に近づければ良い。ラベルの数字に意味は無くて、2番目のダイスのラベルのうち何個に勝てるかが重…

SRM548 Div1 Easy(250), Div2 Medium(500) KingdomAndTrees

KingdomAndTrees二分探索。魔法の出力がxとして条件が満たせるかどうかを判定する場合、前の木よりも高くできないならば不可能。そうでなければ、なるべく木の高さを低くしていくのが最善。下のプログラムでは、pが前の木の高さ。 #include <vector> using namespace</vector>…

SRM548

Easy (250) 230.51 Medium (450) 0 Hard (1000) 0 Challenge -25 結果 272位 2148→2074450は再提出したけど、まだバグっていてシステムで落ちた。そしてチャレンジミス(´・ω・`)

ARC#005 C - 器物損壊!高橋君 ( Search and destroy )

器物損壊!高橋君 ( Search and destroy )道への移動は距離0、壁への移動は距離2と考えて、幅優先探索。 # coding: utf-8 H,W = [int(x)+6 for x in raw_input().split()] c = ["#"*W]*3+["###"+raw_input()+"###" for y in range(H-6)]+["#"*W]*3 D = [[9]*…

ARC#005 B - P-CASカードと高橋君 ( This story is a fiction )

P-CASカードと高橋君 ( This story is a fiction ) x,y,W=raw_input().split() x=int(x);y=int(y) dx=1 if W[0]=="R" else -1 if W[0]=="L" else 0 dy=1 if W[-1]=="D" else -1 if W[-1]=="U" else 0 c = [raw_input() for i in range(9)] p = "" for i in r…

ARC#005 A - 大好き高橋君 ( Love me do )

大好き高橋君 ( Love me do ) input();print [w in["TAKAHASHIKUN","Takahashikun","takahashikun"]for w in raw_input()[:-1].split()].count(True)