<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>寝る前にラーメン &#187; CodeJam</title>
	<atom:link href="http://thleave.com/tag/codejam/feed" rel="self" type="application/rss+xml" />
	<link>http://thleave.com</link>
	<description>学生エンジニアのコードに関する忘備録</description>
	<lastBuildDate>Mon, 30 Aug 2010 15:41:01 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Google Code Jam 2010 Round1B</title>
		<link>http://thleave.com/contests/271</link>
		<comments>http://thleave.com/contests/271#comments</comments>
		<pubDate>Tue, 25 May 2010 06:36:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミングコンテスト]]></category>
		<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[CodeJam]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://thleave.com/?p=271</guid>
		<description><![CDATA[1Aは寝坊しました！
最近実務ばかりで、PHPしか書いてないから最初戸惑ったが、、、Javaバンザイ。
Google Code Jam 2010 is in Dublin!
http://code.google.com/ [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>1Aは寝坊しました！<br />
最近実務ばかりで、PHPしか書いてないから最初戸惑ったが、、、Javaバンザイ。</p>
<p><strong>Google Code Jam 2010 is in Dublin!</strong><br />
<a href="http://code.google.com/codejam">http://code.google.com/codejam</a></p>
<p><span id="more-271"></span></p>
<h3>File Fix-it</h3>
<p>Unixのディレクトリー構造。知ってることが問題だと楽。<br />
mkdirの-pオブションをつけずにディレクトリーを作っていく場合の手数を出す。<br />
Largeでもmax(N)=max(M)=100なので、JavaならばHashSetですぐ。</p>
<h3>Picking Up Chicks</h3>
<p>最初問題の意味がさっぱり分からなかった。<br />
チキンをどうするんだ！チキンを！</p>
<p>相当悩む。テストケース見て意味を探る。<br />
Kの意味の理解に苦しんだ。<br />
最低限スワップする数？？や、この数だけチキンが来ればいいんだ！（ここでアハ体験）<br />
（ここで30分以上かかった）</p>
<p>問題の解釈。</p>
<ul>
<li>（スワップしなければ）並び順通りにゴールしていく！入力が優しい。</li>
<li>順に見ていくうちに時間過ぎたら、それ以降の奴らはスワップしない限り間に合わない</li>
<li>（それでもKに満たないならば、）後ろにいる時間内にゴールできるやつを前に出す。<br />
抜いた分だけがコスト</li>
<li>後ろまでみてKに満たないならばそれはミッションインポッシブル！</li>
</ul>
<p>ここからは書くだけ。<br />
スワップを何で実装しようか迷ったけど、せっかくJavaなんだからLinkedList使うことにした。<br />
[java]<br />
LinkedList<Double> time = new LinkedList<Double>();<br />
// 先頭に追加<br />
time.addFirst(t);<br />
// jに追加<br />
time.add(j, target);<br />
// jを削除<br />
time.remove(j);<br />
[/java]<br />
なんてらくちんな。</p>
<h3>Your Rank is Pure</h3>
<p>やー、全く問題の意味がわからなかった。<br />
なにこれ？<br />
サンプルも２つしか載ってないし。<br />
まだ１時間以上残ってたけど全く解ける気がしなかった。</p>
<p>30分切ったくらいで諦める。2問解いて56pだしいけるんじゃない？って。<br />
したら、みんなsmallはどんどん解いていく。。。どこをどう解釈したら？？</p>
<p>それでも解けないでモヤモヤしてたら終了！その時点で1070位前後。あー。<br />
largeでどれだけ落ちるかと期待したけれど、結果1010位！あと9人！！あと1分ちょい早ければ！！！</p>
<p>これはすげーへこんだ。。<br />
なので、次の日あるのにチャンピオンズリーグを見てしまいましたとさ！<br />
（この終了時間は絶対CL決勝を意識したんだろう！と思ってしまう笑）</p>
<p>1Cは出られなかったので、これで今年のGCJは終わり。<br />
来年また頑張ります。</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://thleave.com/contests/271/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleCodeJam2010 Qualification に参加しました。</title>
		<link>http://thleave.com/contests/253</link>
		<comments>http://thleave.com/contests/253#comments</comments>
		<pubDate>Sun, 09 May 2010 09:28:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミングコンテスト]]></category>
		<category><![CDATA[CodeJam]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://thleave.com/?p=253</guid>
		<description><![CDATA[先日開催されたGCJ2010のオンライン予選に参加しました。
ここんところ就活漬けで、コンテスト系のコードにはあまり触れられてなかったんですが、
自分にしてはまずまずの出来だったと思います。

結果から先に言うと、
(s [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>先日開催されたGCJ2010のオンライン予選に参加しました。<br />
ここんところ就活漬けで、コンテスト系のコードにはあまり触れられてなかったんですが、<br />
自分にしてはまずまずの出来だったと思います。</p>
<p><span id="more-253"></span></p>
<p>結果から先に言うと、<br />
(small,large)<br />
A (o,o) +33p<br />
B (x,x)<br />
C (o,x) +10p<br />
43p<br />
で、5809位でした。</p>
<h3>A, Snapper Chain</h3>
<p>問題文を解読するのに時間がかかった。<br />
解読し終わった後に最終的に式に落とし込めそうな気がしたので、<br />
ちょっとずつ共通項をあぶり出していった。</p>
<p>まず、Nに対する手数は固定で、max(N)=30だったので、先に計算して辞書でOK<br />
加えて、電気が付いている状態というのは、コストとほぼ同義。<br />
一度点いたあとはスナッパーが全部OFFになるので、その後は１を挟んで繰り返し。</p>
<p>[java]<br />
	public SnapperChain(Scanner sc, PrintStream ps){<br />
		int[] dic = new int[31];<br />
		dic[1] = 1;<br />
		dic[2] = 3;<br />
		for (int i = 3; i <= 30; i++) {<br />
			dic[i] = (dic[i - 1] - dic[i - 2]) * 2 + dic[i - 1];<br />
		}</p>
<p>		int T = sc.nextInt();<br />
		for (int i = 1; i <= T; i++) {<br />
			int N = sc.nextInt();<br />
			int K = sc.nextInt();<br />
			int cost = dic[N];</p>
<p>			while(true) {<br />
				K -= cost;<br />
				if (K <= 0) break;<br />
				K--;<br />
			}</p>
<p>			if (K == 0) {<br />
				ps.println("Case #"+i+": "+"ON");<br />
			} else {<br />
				ps.println("Case #"+i+": "+"OFF");<br />
			}<br />
		}</p>
<p>		ps.close();<br />
	}<br />
[/java]</p>
<h3>B, Fair Warning</h3>
<p>集中力がきれていて、もうさっぱりわからなかった。<br />
ひとまず、BigInteger使ってひたすら枝刈りした方針は合っているんだろうか？<br />
smallすら通らなかった。</p>
<p>解法は後で読みます。</p>
<p>http://code.google.com/codejam/contest/dashboard?c=433101#s=a&#038;a=1</p>
<h3>C, Theme Park</h3>
<p>smallは問題文の通りコードに起こすだけなので、small正答率も一番高かった模様。<br />
けど、largeはそう簡単には通らないよね。<br />
つい面倒くさくなってすぐlargeやったら通りませんでした。反省してます。</p>
<p>これも後で解法読んで書き直します。</p>
<p>http://code.google.com/codejam/contest/dashboard?c=433101#s=a&#038;a=2</p>
<p>[java]<br />
	public ThemePark(Scanner sc, PrintStream ps) {<br />
		int T = sc.nextInt();<br />
		for (int i = 0; i < T; i++) {<br />
			int R = sc.nextInt();<br />
			int K = sc.nextInt();<br />
			int N = sc.nextInt();</p>
<p>			int[] group = new int[N];<br />
			for (int j = 0; j < N; j++) {<br />
				group[j] = sc.nextInt();<br />
			}</p>
<p>			long res = 0;<br />
			int index = 0;<br />
			int startIndex = 0;<br />
			for (int j = 0; j < R; j++) {<br />
				startIndex = index;<br />
				int k = K;<br />
				while (true) {<br />
					if (k >= group[index]) k -= group[index++];<br />
					else break;<br />
					if (index == N) index = 0;<br />
					if (startIndex == index) break;<br />
				}<br />
				res += K &#8211; k;<br />
			}</p>
<p>			ps.println(&#8220;Case #&#8221;+(i+1)+&#8221;: &#8220;+res);<br />
			System.out.println(&#8220;Case #&#8221;+(i+1)+&#8221;: &#8220;+res);<br />
		}<br />
		ps.close();<br />
	}<br />
[/java]</p>
<h3>Result</h3>
<p>予選は通過できたのは良いこと。<br />
だけど、6000位近いポジションじゃぁ次で落ちるなあ。</p>
<p>もっと頭柔らかくして、しっかり準備して次にのぞもうと思います。</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://thleave.com/contests/253/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleCodeJam2009 Round1B</title>
		<link>http://thleave.com/coding/121</link>
		<comments>http://thleave.com/coding/121#comments</comments>
		<pubDate>Sat, 12 Sep 2009 16:02:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[CodeJam]]></category>

		<guid isPermaLink="false">http://thleave.com/?p=121</guid>
		<description><![CDATA[Qualification Roundの次のRound1
ここくらいは突破したかったけど無理でした(笑
A,DecisionTree
SmallとLargeともにわりかし楽に通った。
言い訳なっちゃうけど、Round1A [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>Qualification Roundの次のRound1<br />
ここくらいは突破したかったけど無理でした(笑</p>
<p><strong>A,DecisionTree</strong></p>
<p>SmallとLargeともにわりかし楽に通った。<br />
言い訳なっちゃうけど、Round1Aのボーダーが１問完答だったから余裕こいでた。<br />
たらたら書きすぎて@1h</p>
<p><strong>B, TheNextNumber</strong></p>
<p>順位見て焦っちゃった。冷静になれば。<br />
桁数がintで溢れるのでたぶんLargeは点数高いんだな。<br />
結局char配列使うんで両方いけるなあと組んでたけど時間切れorz</p>
<p>どうせRound2は日程的に無理だったけど、せめて1回戦はなぁー無念。</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://thleave.com/coding/121/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleCodeJam2009 Qualification Round</title>
		<link>http://thleave.com/contests/111</link>
		<comments>http://thleave.com/contests/111#comments</comments>
		<pubDate>Sat, 05 Sep 2009 14:20:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミングコンテスト]]></category>
		<category><![CDATA[CodeJam]]></category>

		<guid isPermaLink="false">http://thleave.com/?p=111</guid>
		<description><![CDATA[予選。
夜中しか無理だったので、睡魔との戦い。

A. Alien Language
考えようではただの正規表現。
（Hashでいけるかと組んでみたけど、smallすら無理だった）
[java]
	public Alie [...]]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>予選。<br />
夜中しか無理だったので、睡魔との戦い。</p>
<p><span id="more-111"></span></p>
<p><strong>A. Alien Language</strong></p>
<p>考えようではただの正規表現。<br />
（Hashでいけるかと組んでみたけど、smallすら無理だった）</p>
<p>[java]<br />
	public AlienLanguage() throws FileNotFoundException{<br />
		FileInputStream fis = new FileInputStream(&#8220;src/qualification_round/A-large.in&#8221;);<br />
		Scanner sc = new Scanner(fis);</p>
<p>		int L = sc.nextInt();<br />
		int D = sc.nextInt();<br />
		int N = sc.nextInt();</p>
<p>		char[][] d = new char[D][L];</p>
<p>		// dic<br />
		for (int i = 0; i < D; i++) {<br />
			d[i] = sc.next().toCharArray();<br />
		}</p>
<p>		char[][] t = new char[L][];</p>
<p>		// test case<br />
		for (int i = 0; i < N; i++) {<br />
			String s = sc.next();</p>
<p>			int p = 0;<br />
			for (int j = 0; j < s.length(); j++, p++) {<br />
				char c = s.charAt(j);</p>
<p>				if (c == '(') {<br />
					int b = j;<br />
					while (c != ')') {<br />
						c = s.charAt(++j);<br />
					}<br />
					t[p] = s.substring(b + 1, j).toCharArray();<br />
					Arrays.sort(t[p]);<br />
				} else {<br />
					t[p] = new char[]{c};<br />
				}<br />
			}</p>
<p>			int count = 0;<br />
			for (int j = 0; j < D; j++) {<br />
				for (int k = 0; k < L; k++) {<br />
					if (Arrays.binarySearch(t[k], d[j][k]) < 0) {<br />
						break;<br />
					}<br />
					if (k == L - 1) {<br />
						count++;<br />
					}<br />
				}<br />
			}<br />
			System.out.println("Case #" + (i + 1) + ": " + count);<br />
		}<br />
	}<br />
[/java]</p>
<p><strong>B. Watersheds</strong></p>
<p>問題文の翻訳に苦戦。名詞よくわかんない。<br />
コード自体は素直に左上から順に流していく感じ。</p>
<p>[java]<br />
	Point[] p = new Point[]{new Point(-1, 0), new Point(0, -1), new Point(0, 1), new Point(1, 0)};<br />
	int[][] map;<br />
	char[][] result;<br />
	char label;</p>
<p>	public Watersheds() throws FileNotFoundException {<br />
		FileInputStream fis = new FileInputStream(&#8220;src/qualification_round/B-large.in&#8221;);<br />
		Scanner sc = new Scanner(fis);</p>
<p>		int M = sc.nextInt();</p>
<p>		for (int i = 0; i < M; i++) {<br />
			int H = sc.nextInt();<br />
			int W = sc.nextInt();</p>
<p>			// init<br />
			map = new int[H + 2][W + 2];<br />
			Arrays.fill(map[0], 10000);<br />
			Arrays.fill(map[H + 1], 10000);<br />
			for (int j = 0; j < H + 2; j++) {<br />
				map[j][0] = 10000;<br />
				map[j][W + 1] = 10000;<br />
			}</p>
<p>			// build map<br />
			for (int j = 1; j < H + 1; j++) {<br />
				for (int k = 1; k < W + 1; k++) {<br />
					map[j][k] = sc.nextInt();<br />
				}<br />
			}</p>
<p>			// flow<br />
			result = new char[H + 2][W + 2];<br />
			result[1][1] = label = 'a';</p>
<p>			flow(1, 1, (char)0, new LinkedList<Point>());<br />
			for (int j = 1; j < H + 1; j++) {<br />
				for (int k = 1; k < W + 1; k++) {<br />
					if (result[j][k] < 'a') flow(j, k, (char)0, new LinkedList<Point>());<br />
				}<br />
			}</p>
<p>			// output<br />
			System.out.println(&#8220;Case #&#8221; + (i + 1) + &#8220;:&#8221;);<br />
			for (int j = 1; j < H + 1; j++) {<br />
				for (int k = 1; k < W + 1; k++) {<br />
					if (k != 1) System.out.print(" ");<br />
					System.out.print(result[j][k]);<br />
				}<br />
				System.out.println();<br />
			}<br />
		}<br />
	}</p>
<p>	public void flow(int h, int w, char l, LinkedList<Point> list){<br />
		list.add(new Point(h, w));<br />
		// has label?<br />
		if (result[h][w] >= &#8216;a&#8217;) {<br />
			l = result[h][w];<br />
		}</p>
<p>		// has next?<br />
		int min = map[h][w];<br />
		int d = -1;<br />
		for (int i = 0; i < 4; i++) {<br />
			if (min > map[h + p[i].x][w + p[i].y]) {<br />
				min = map[h + p[i].x][w + p[i].y];<br />
				d = i;<br />
			}<br />
		}</p>
<p>		if (d >= 0) {<br />
			// flow<br />
			flow(h + p[d].x, w + p[d].y, l, list);<br />
		} else {<br />
			// bain<br />
			if (l < 'a') l = ++label;<br />
			for (Iterator<Point> iterator = list.iterator(); iterator.hasNext();) {<br />
				Point point = iterator.next();<br />
				result[point.x][point.y] = l;<br />
			}<br />
		}<br />
	}<br />
[/java]</p>
<p><strong>C. Welcome to Code Jam</strong></p>
<p>意味はわかりやすかったけど、眠気に負けて寝落ち。<br />
DP嫌いだったという理由もあったとかなかったとか(笑</p>
<p>起きてスコアみてみたら、全然苦労した記憶ないのに、B解くのに2時間くらいかかってた。<br />
次は時間制限あるし、いい時間にやれるといいなあ。</p>
<p>とりあえず66pで次にはあがれそうなので、Tシャツ目指して頑張ります。</p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://thleave.com/contests/111/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleCodeJam2009 Registration Open!</title>
		<link>http://thleave.com/contests/74</link>
		<comments>http://thleave.com/contests/74#comments</comments>
		<pubDate>Thu, 13 Aug 2009 12:29:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミングコンテスト]]></category>
		<category><![CDATA[CodeJam]]></category>

		<guid isPermaLink="false">http://thleave.com/?p=74</guid>
		<description><![CDATA[表題の旨を知らせるメールがきました。
頑張ろう。
http://code.google.com/intl/ja-JP/codejam/
]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start --><p>表題の旨を知らせるメールがきました。<br />
頑張ろう。</p>
<p><a href="http://code.google.com/intl/ja-JP/codejam/">http://code.google.com/intl/ja-JP/codejam/</a></p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://thleave.com/contests/74/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
