<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
  <title>iddy.jp - RSS feeds by yuyarin</title> 
  <link>http://iddy.jp/rss/blog/yuyarin/</link> 
  <description>RSS feeds by yuyarin hosted at http://iddy.jp/</description>
  <language>ja</language>
  <item>
    <title>[Internet]2ch.netの接続障害とへ経路の揺れ</title> 
    <description>
    <![CDATA[
      2012年01月21日の14時頃から２ちゃんねるのuni鯖など一部のサーバの板が閲覧不能に．0時前に回復するも断続的に接続不能になり，午前５時に再度接続不能状態が続いて現在に至る． Megauploadに対する米当局の逮捕・閉鎖に抗議したanonymouseによる，政府系サイトやFBI，レコード会社系サイトへのDoS攻撃が行われているが(MailOnline, ITProPortal)，これらのWebサイトがPIE(PacificInternetExchange)のデータセンターにあるため，同じデータ ...
    ]]>
    </description>
    <link>http://d.hatena.ne.jp/yuyarin/20120122/1327187823</link> 
    <pubDate>Sun, 22 Jan 2012 08:17:03 +0900</pubDate>
   </item>
  <item>
    <title>[rrdtool][UNIX][zsh]rrdtool fetchをフォーマットするzsh関数</title> 
    <description>
    <![CDATA[
      ネットワークの監視のためにトラフィックのデータをmrtgやcactiでとっていると，生データを見たくなる時が時々あるのだけれども，rrdtool fetchのデフォルトの表示では分かり辛いのでフォーマットするzshの関数を書いてみた． ひとまず１カラム目のUNIX timeをフォーマットする関数．  rrd-fetch () { rrdtool fetch $@ | gawk -F : '{ s = $1; if (match($1, /^[0-9]+/)>0) { cmd = ...
    ]]>
    </description>
    <link>http://d.hatena.ne.jp/yuyarin/20120107/1325874913</link> 
    <pubDate>Sat, 07 Jan 2012 03:35:13 +0900</pubDate>
   </item>
  <item>
    <title>[Firefox]Firefox6でTab Mix PlusとTree Style Tabを同時に使うとファビコンが潰れる問題</title> 
    <description>
    <![CDATA[
       DOM Inspectorで調べてなんとなく調整してみた．アイコンというよりタブ自体にマージン，パディングが掛かっていてアイコンの描画領域が縦に潰れていた模様．  skin/classic/treestyletab/metal/base.css の 98 行目以降の .tab-icon padding を書き換え．上下10pxのパディングを2,0ぐらいにするといい感じ．  /* tab contents */ .tabbrowser-tabs[treestyletab-mode="vert ...
    ]]>
    </description>
    <link>http://d.hatena.ne.jp/yuyarin/20110826/1314363602</link> 
    <pubDate>Fri, 26 Aug 2011 22:00:02 +0900</pubDate>
   </item>
  <item>
    <title>[Ruby]Rubyで直前の日曜日の日時を求める</title> 
    <description>
    <![CDATA[
      rrdgraphで日曜日始まりの１週間グラフを書きたい時に必要なので． UNIX時間で0，Time.at(0)がGMTで木曜日の０時なので３日とgmt_offset分だけ平行移動すると，日曜日の０時が１週間(7*86400)で割り切れる値になるので端数を除去，ずらした分だけ元に戻すと直前の日曜日の０時の時刻が得られる．  def last_sunday(t) slide = 3*86400 - t.gmt_offset t = t.to_i - slide return Time.at(t-t%(7* ...
    ]]>
    </description>
    <link>http://d.hatena.ne.jp/yuyarin/20110821/1313914531</link> 
    <pubDate>Sun, 21 Aug 2011 17:15:31 +0900</pubDate>
   </item>
  <item>
    <title>[Ruby][Algorithm]Rubyでdijkstra法</title> 
    <description>
    <![CDATA[
      Rubyでダイクストラ法を使って始点からの最短経路を求めることができるかもしれないコード  nodes = ["A", "B", "C", "D", "E"] connections = [ # [node1, node2, cost(1->2), cost(2->1)] ["A", "B", 6, 9], ["A", " ...
    ]]>
    </description>
    <link>http://d.hatena.ne.jp/yuyarin/20110820/1313766566</link> 
    <pubDate>Sat, 20 Aug 2011 00:09:26 +0900</pubDate>
   </item>
  <item>
    <title>「5×5のマス目に6個の○を次の条件を満たすように全部書く」を解いてみた</title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a href="http://blog.livedoor.jp/dankogai/archives/51607379.html" target="_blank">404 Blog Not Found:Math - 5×5のマス目に6個の○を次の条件を満たすように全部書く</a></p>
			<blockquote>
			<p>5×5のマス目に6個の○を次の条件を満たすように書きます。</p>
			<p>条件：各行・各列に少なくとも1個は○を書く。同じマスには2個以上の○を書くことはできない。</p>
			<p>このとき、6個の○を書く方法は全部で何通りありますか。</p>
			</blockquote>
			<p>RSS を眺めているときにこの記事を見つけて dankogai ならきっと．．．！と思って「続きを読む」を押したら総当り６重 for ループでがっかりしたので，変数を可変にして自分で書いてみた．combination 関数をちゃんと書いてないのででかい数を渡すとオーバーフローします．</p>
			<p>典型的な <a class="keyword" href="http://topcoder.g.hatena.ne.jp/keyword/DP">DP</a> ですよね．20分ぐらいで書けました．間違ってたら指摘お願いします．</p>
			<p>弾さんも書いている通り総当りでも 25_P_6 = 127,512,000 なんで TopCoder でもなければ総当たったほうが楽で，時と場合と目的に依ってはそれもベストなコードの１つですね（TopCoderだとTLEする）．</p>
<pre>
/Users/yuyarin% time ./a.out       
n=5 m=5 c=6
answer: 4200
./a.out  0.00s user 0.00s system 18% cpu 0.012 total
/Users/yuyarin% time ./a.out 7 7 9 
n=7 m=7 c=9
answer: 13003620
./a.out 7 7 9  0.00s user 0.00s system 17% cpu 0.013 total
/Users/yuyarin% time ./a.out 9 7 13
n=9 m=7 c=13
answer: 1016446631327
./a.out 9 7 13  0.00s user 0.00s system 31% cpu 0.008 total
</pre>

			<p>どっかでオーバーフローしてるかもしれない．</p>
			<p>イカソース</p>
			<a name="seemore"></a>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20110127/1296140636</link> 
    <pubDate>Thu, 27 Jan 2011 15:03:56 GMT</pubDate>
   </item>
  <item>
    <title>ハチロク忘年会の幹事だれかやってくれませんかね？</title> 
    <description>
    <![CDATA[
     皆様いかがお過ごしでしょうか？ゆやりんです． 通算第３回目になる今年のハチロク忘年会ですが，私は修論で死んでるので幹事を誰かやってくれると嬉しいです．．． お店の予約と出欠
    ]]>
    </description>
    <link>http://generation1986.g.hatena.ne.jp/yuyarin/20101130/1291063476</link> 
    <pubDate>Tue, 30 Nov 2010 05:44:36 +0900</pubDate>
   </item>
  <item>
    <title>[★★★★☆][SRM 483][binary search]SRM 483 Sheep</title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a href="http://www.topcoder.com/stat?c=problem_statement&pm=10920&rd=14236" target="_blank">http://www.topcoder.com/stat?c=problem_statement&amp;pm=10920&amp;rd=14236</a></p>
			<h4>問題</h4>
			<p>重さのある羊がたくさんいる．これを重量の容量がある船に乗せて川を渡らせる．乗せる羊の選び方は，残り容量以下で重い方から選んでいく．与えられた回数以下で全ての羊を渡らせるときに，船の最小の容量を求める．</p>
			<h4>アプローチ</h4>
			<p>ぱっと見，何の変哲もない二分探索の問題であるが落とし穴がある．</p>
			<p>ある容量で回数内に運べるからといって，それより大きい容量で運べるとは限らないからである．chokudai 氏がテストケースを挙げている</p>
			<p> <style type="text/css">.bbpBox25517907741 {background:url('http://s.twimg.com/a/1285026911/images/themes/theme1/bg.png') #C0DEED;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style> <div class="bbpBox25517907741"><p class="bbpTweet">９００のチャレンジケース　14,3,"100 60 50 39 35 30 30 30 25 25 24 20 9"<span class="timestamp"><a href="http://twitter.com/chokudai/status/25517907741" title="Sat Sep 25 17:38:36 +0000 2010">less than a minute ago</a> via <a rel="nofollow" href="http://sites.google.com/site/peraperaprv/Home">P3:PeraPeraPrv</a></span><span class="metadata"><span class="author"><a href="http://twitter.com/chokudai"><img src="http://a2.twimg.com/profile_images/68721274/myon_sei_normal.PNG"></a><strong><a href="http://twitter.com/chokudai">Naohiro Takahashi</a></strong><br/>chokudai</span></span></p></div> </p>
			<p>すげえｗｗｗどうやって見つけたんだｗｗｗ<span style="font-size:xx-small;">［<a href="http://twitter.com/chokudai/status/25519460763" target="_blank">出典</a>］</span></p>
			<p>容量 159 で成立するけど 160 では成立しないケースのようである．</p>
			<p>というわけで二分探索で求めた後，前を 2000 個ほど探索している．この 2000 という値には全く根拠がないのだが（しいて言えば羊の重さの上限），本当にこれでいいんだろうか・・・？</p>
			<p>※追記：wata さんによれば，(羊の重さの合計)/(運べる最大回数)から(羊の重さの合計)/(運べる最大回数)+(羊の最大の重さ)までに必ず解があると証明できるとのこと．</p>
			<p> <style type="text/css">.bbpBox25553568895 {background:url('http://s.twimg.com/a/1284676327/images/themes/theme13/bg.gif') #B2DFDA;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style> <div class="bbpBox25553568895"><p class="bbpTweet">昨日の900の証明って別に簡単だよね　全部の和/回数+最大重みがあれば、極大サイズが全部の和/回数以上になるので絶対可能　よって全部の和/回数から+2000調べればよい<span class="timestamp"><a href="http://twitter.com/wata_orz/status/25553568895" title="Sun Sep 26 02:46:59 +0000 2010">less than a minute ago</a> via <a rel="nofollow" href="http://www.hootsuite.com">HootSuite</a></span><span class="metadata"><span class="author"><a href="http://twitter.com/wata_orz"><img src="http://a3.twimg.com/profile_images/653924243/twitterProfilePhoto_normal.jpg"></a><strong><a href="http://twitter.com/wata_orz">Yoichi Iwata</a></strong><br/>wata_orz</span></span></p></div> </p>
			<h4>ソースコード</h4>
<pre class="syntax-highlight">
#include &amp;#<span class="synConstant">60</span>;cstdio&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;vector&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;iostream&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;sstream&amp;#<span class="synConstant">62</span>;

#include &amp;#<span class="synConstant">60</span>;set&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;algorithm&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;numeric&amp;#<span class="synConstant">62</span>;

<span class="synStatement">using</span> <span class="synType">namespace</span> std;

<span class="synPreProc">#define sz(a) </span><span class="synType">int</span><span class="synPreProc">((a).size())</span>
<span class="synPreProc">#define All(a)  (a).begin(),(a).end()</span>

<span class="synPreProc">#define For(i,a,b)    </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=(a);i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(b);++i)</span>
<span class="synPreProc">#define Rep(i,n)      </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=</span><span class="synConstant">0</span><span class="synPreProc">;i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(n);++i)</span>
<span class="synPreProc">#define Each(i,c)     </span><span class="synStatement">for</span><span class="synPreProc">(typeof((c).begin()) i=(c).begin();i!=(c).end();++i)</span>

<span class="synType">bool</span> judge(multiset&amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; s, <span class="synType">int</span> c, <span class="synType">int</span> maxRuns)
{
	<span class="synType">int</span> runs = <span class="synConstant">0</span>;
	multiset&amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>;::iterator it;
	<span class="synStatement">while</span>(sz(s))
	{
		<span class="synType">int</span> cc = c;
		<span class="synStatement">while</span>(cc&amp;#<span class="synConstant">62</span>;<span class="synConstant">0</span>&amp;#<span class="synConstant">38</span>;&amp;#<span class="synConstant">38</span>;sz(s))
		{
			it = s.upper_bound(cc);
			<span class="synStatement">if</span>(it==s.begin()) <span class="synStatement">break</span>;
			it--;
			cc -= *it;
			s.erase(it);
		}
		<span class="synStatement">if</span>(++runs&amp;#<span class="synConstant">62</span>;maxRuns)
			<span class="synStatement">return</span> <span class="synConstant">false</span>;
	}
	
	<span class="synStatement">return</span> <span class="synConstant">true</span>;
}

<span class="synType">int</span> minCapacity(<span class="synType">int</span> numSheep, <span class="synType">int</span> maxRuns, vector &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>; part1, vector &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>; part2, vector &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>; part3, vector &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>; part4)
{
	multiset&amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; msi;
	string str;
	<span class="synType">int</span> n;
	Each(s,part1) str+=*s;
	Each(s,part2) str+=*s;
	Each(s,part3) str+=*s;
	Each(s,part4) str+=*s;
	istringstream iss(str); <span class="synStatement">while</span>(iss&amp;#<span class="synConstant">62</span>;&amp;#<span class="synConstant">62</span>;n) msi.insert(n);
	<span class="synType">int</span> sum = accumulate(All(msi),<span class="synConstant">0</span>);
	<span class="synType">int</span> max = *max_element(All(msi));
	
	<span class="synStatement">for</span>(<span class="synType">int</span> capasity=sum/maxRuns; capasity&amp;#<span class="synConstant">60</span>;=sum/maxRuns+max+<span class="synConstant">1</span>; capasity++)
		<span class="synStatement">if</span>(judge(msi,capasity,maxRuns)) <span class="synStatement">return</span> capasity;
	<span class="synStatement">return</span> -<span class="synConstant">1</span>;
<span class="synComment">/*</span>
<span class="synComment">	// binary search version</span>
<span class="synComment">	int min = *max_element(All(msi));</span>
<span class="synComment">	int max = accumulate(All(msi),0);</span>
<span class="synComment">	</span>
<span class="synComment">	while(max-min&amp;#62;1)</span>
<span class="synComment">	{</span>
<span class="synComment">		int mid = (min+max)/2;</span>
<span class="synComment">		if(bs(msi,mid,maxRuns))</span>
<span class="synComment">			max = mid;</span>
<span class="synComment">		else</span>
<span class="synComment">			min = mid;</span>
<span class="synComment">	}</span>
<span class="synComment">	</span>
<span class="synComment">	For(c,min-2000,max)</span>
<span class="synComment">		if(bs(msi,c,maxRuns)) return c;</span>
<span class="synComment">	</span>
<span class="synComment">	return max;</span>
<span class="synComment">*/</span>
}
</pre>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20100928/1285612583</link> 
    <pubDate>Mon, 27 Sep 2010 18:36:23 GMT</pubDate>
   </item>
  <item>
    <title>[★★★☆☆][SRM 483][dynamic programming]SRM 483 Bribes</title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a href="http://www.topcoder.com/stat?c=problem_solution&rm=305892&rd=14236&pm=11037&cr=22851423" target="_blank">http://www.topcoder.com/stat?c=problem_solution&amp;rm=305892&amp;rd=14236&amp;pm=11037&amp;cr=22851423</a></p>
			<h4>問題</h4>
			<p>選挙において投票者に最小限の賄賂を渡して勝つようにする．n 人の投票者がいて，それぞれ影響度 influence と抵抗度 resistance が存在する．i 番目の人に賄賂を渡すと，j 番目の人の抵抗度が influence[i]/2^|i-j| だけ減る．全員の抵抗度が 0 以下になれば賄賂は成功する．賄賂が成功する渡し方のうち，賄賂を渡す人数が最小になる人数を返す．できなければ失敗として -1 を返す．</p>
			<h4>アプローチ</h4>
			<p>一見すると O(n*2^n) な複数ナップサック問題のように見えるが，影響度の値が 500 以下，つまり 2^9 より小さいので両隣 8 人目まで考慮すればいいことが分かる．これで 2^n の部分が 2^17 の定数で押さえられるので O(n)．で解くことができる（定数項はそれなりに大きいので注意）．</p>
			<p>両隣 8 人を含めた計 17 人への賄賂を 17-bit で表現することができる．<a class="keyword" href="http://topcoder.g.hatena.ne.jp/keyword/DP">DP</a> の問題の分割は投票者の人数で行うことができる．つまり０人，１人，と増やしていく．i 人目の抵抗度を 0 にするには i-8 人目から i+8 人目までの影響度を考慮すればいい．抵抗度を 0 にできるパターンの中から最も賄賂を渡す人数が少ないパターンを記録している． i+1 人目を計算するには i 人目のビットパターンのうち上位 16-bit だけ分かればよいので，配列に保存するのは 16-bit 分で良いことが分かる． n 人目まで繰り返していき，最小の値（人数）を選ぶ．</p>
			<p>配列のサイズが大きいので int では allocate できない．short を使う．</p>
			<h4>ソースコード</h4>
<pre class="syntax-highlight">
#include &amp;#<span class="synConstant">60</span>;cstdio&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;vector&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;iostream&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;sstream&amp;#<span class="synConstant">62</span>;

#include &amp;#<span class="synConstant">60</span>;cmath&amp;#<span class="synConstant">62</span>;

<span class="synStatement">using</span> <span class="synType">namespace</span> std;

<span class="synPreProc">#define sz(a) </span><span class="synType">int</span><span class="synPreProc">((a).size())</span>
<span class="synPreProc">#define For(i,a,b)    </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=(a);i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(b);++i)</span>
<span class="synPreProc">#define Rep(i,n)      </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=</span><span class="synConstant">0</span><span class="synPreProc">;i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(n);++i)</span>

<span class="synType">short</span> dp[<span class="synConstant">51</span>][<span class="synConstant">1</span>&amp;#<span class="synConstant">60</span><span class="synError">;</span>&amp;#<span class="synConstant">60</span><span class="synError">;</span><span class="synConstant">16</span>];

<span class="synType">int</span> minBribes(vector &amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; influence, vector &amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; resistance)
{
	<span class="synType">int</span> n = sz(influence);
	<span class="synType">int</span> INF = <span class="synConstant">100</span>;
	
	Rep(i,n+<span class="synConstant">1</span>) Rep(j,<span class="synConstant">1</span>&amp;#<span class="synConstant">60</span>;&amp;#<span class="synConstant">60</span>;<span class="synConstant">16</span>)
		dp[i][j] = i ? INF : __builtin_popcount(j);
	
	Rep(i,n) Rep(mask,<span class="synConstant">1</span>&amp;#<span class="synConstant">60</span>;&amp;#<span class="synConstant">60</span>;<span class="synConstant">17</span>)
	{
		<span class="synType">int</span> sum = <span class="synConstant">0</span>;
		<span class="synStatement">for</span>(<span class="synType">int</span> j=i-<span class="synConstant">8</span>,k=<span class="synConstant">0</span>; j&amp;#<span class="synConstant">60</span>;=i+<span class="synConstant">8</span>; j++,k++)
			<span class="synStatement">if</span>((mask&amp;#<span class="synConstant">38</span>;(<span class="synConstant">1</span>&amp;#<span class="synConstant">60</span>;&amp;#<span class="synConstant">60</span>;k)) &amp;#<span class="synConstant">38</span>;&amp;#<span class="synConstant">38</span>; <span class="synConstant">0</span>&amp;#<span class="synConstant">60</span>;=j&amp;#<span class="synConstant">38</span>;&amp;#<span class="synConstant">38</span>;j&amp;#<span class="synConstant">60</span>;n)
				sum += influence[j]&amp;#<span class="synConstant">62</span>;&amp;#<span class="synConstant">62</span>;abs(j-i);
		<span class="synStatement">if</span>(sum&amp;#<span class="synConstant">62</span>;=resistance[i])
			dp[i+<span class="synConstant">1</span>][mask&amp;#<span class="synConstant">62</span><span class="synError">;</span>&amp;#<span class="synConstant">62</span><span class="synError">;</span><span class="synConstant">1</span>] = min(
				(<span class="synType">int</span>)dp[i+<span class="synConstant">1</span>][mask&amp;#<span class="synConstant">62</span><span class="synError">;</span>&amp;#<span class="synConstant">62</span><span class="synError">;</span><span class="synConstant">1</span>],
				(<span class="synType">int</span>)dp[i][mask%(<span class="synConstant">1</span>&amp;#<span class="synConstant">60</span>;&amp;#<span class="synConstant">60</span>;<span class="synConstant">16</span>)]+mask/(<span class="synConstant">1</span>&amp;#<span class="synConstant">60</span>;&amp;#<span class="synConstant">60</span>;<span class="synConstant">16</span>)
			);
	}
	<span class="synType">int</span> r = INF;
	Rep(j,<span class="synConstant">1</span>&amp;#<span class="synConstant">60</span>;&amp;#<span class="synConstant">60</span>;<span class="synConstant">16</span>)
		r = min(r,(<span class="synType">int</span>)dp[n][j]);
	
	<span class="synStatement">return</span> r&amp;#<span class="synConstant">62</span>;n ? -<span class="synConstant">1</span> : r;
}
</pre>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20100928/1285602921</link> 
    <pubDate>Mon, 27 Sep 2010 15:55:21 GMT</pubDate>
   </item>
  <item>
    <title>[★★☆☆☆][SRM 483]SRM 483 BestApproximationDiv1</title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a href="http://www.topcoder.com/stat?c=problem_solution&rm=305892&rd=14236&pm=11023&cr=22851423" target="_blank">http://www.topcoder.com/stat?c=problem_solution&amp;rm=305892&amp;rd=14236&amp;pm=11023&amp;cr=22851423</a></p>
			<h4>問題</h4>
			<p>与えられた数より小さい分母を持つ分数の中から，与えられた 1 より小さい小数点以下６桁の小数を最もよく近似する分数を見つける問題．</p>
			<h4>アプローチ</h4>
			<p>分母を小さい値から固定していき，分子を近似対象の小数と分母の掛け算で決定．誤差があるので分子は floor と ceil の両方を計算する．</p>
			<p>本番では Failed System Test だった．理由は作った分数の小数表現を sprintf("%.8f") で作ったから．sprintf は指定桁数以下の値を四捨五入してしまうので小数点以下７桁目以降が 995 より大きいテストケースだと失敗する．"%.10f" で失敗するケースは無かった模様．</p>
<pre>
Test Case: 138
Args: {1000, &#34;0.812983&#34;}
Expected: &#34;313/385 has 6 exact digits&#34;
Received: &#34;526/647 has 7 exact digits&#34;
</pre>

			<p>こうした誤差を最初から出さないためには 10^6 倍して整数として計算するのがよい．問題はこの方法でも int の範囲内で計算できるように設計されているようだ．</p>		</div>

		<div class="section">
			<h3 class="title"><a href="http://topcoder.g.hatena.ne.jp/yuyarin/#p1" name="p1">
*</a></h3>			<p class="sectionheader"></p>			<h4>ソースコード</h4>
<pre class="syntax-highlight">
#include &amp;#<span class="synConstant">60</span>;cstdio&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;vector&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;iostream&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;sstream&amp;#<span class="synConstant">62</span>;

<span class="synStatement">using</span> <span class="synType">namespace</span> std;

<span class="synType">inline</span> <span class="synType">int</span> toi(string s){<span class="synType">int</span> v; istringstream iss(s);iss&amp;#<span class="synConstant">62</span>;&amp;#<span class="synConstant">62</span>;v;<span class="synStatement">return</span> v;}
<span class="synType">template</span>&amp;#<span class="synConstant">60</span>;<span class="synType">class</span> T&amp;#<span class="synConstant">62</span>; <span class="synType">inline</span> string tos(T x){ostringstream oss;oss&amp;#<span class="synConstant">60</span>;&amp;#<span class="synConstant">60</span>;x;<span class="synStatement">return</span> oss.str();}

<span class="synPreProc">#define For(i,a,b)    </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=(a);i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(b);++i)</span>

string findFraction(<span class="synType">int</span> maxDen, string number)
{
	<span class="synType">int</span> ml = <span class="synConstant">0</span>;
	<span class="synType">int</span> mn = <span class="synConstant">0</span>;
	<span class="synType">int</span> md = <span class="synConstant">0</span>;
	<span class="synType">int</span> num = toi(number.c_str()+<span class="synConstant">2</span>);
	
	For(d,<span class="synConstant">1</span>,maxDen+<span class="synConstant">1</span>) For(dd,<span class="synConstant">0</span>,<span class="synConstant">2</span>)
	{
		<span class="synType">int</span> n = num*d;
		n -= n%<span class="synConstant">1000000</span>;
		n += dd*<span class="synConstant">1000000</span>;
		<span class="synType">int</span> x = n/d;
		<span class="synType">int</span> y = <span class="synConstant">100000</span>;
		<span class="synType">int</span> l = <span class="synConstant">1</span>;
		For(i,<span class="synConstant">0</span>,<span class="synConstant">6</span>)
		{
			<span class="synStatement">if</span>(x/y!=num/y) <span class="synStatement">break</span>;
			l++;
			y /= <span class="synConstant">10</span>;
		}
		<span class="synStatement">if</span>(l&amp;#<span class="synConstant">62</span>;ml)
		{
			mn = n/<span class="synConstant">1000000</span>;
			md = d;
			ml = l;
		}
	}
	
	<span class="synType">char</span> s[<span class="synConstant">64</span>];
	sprintf(s, <span class="synConstant">&quot;</span><span class="synSpecial">%d</span><span class="synConstant">/</span><span class="synSpecial">%d</span><span class="synConstant"> has </span><span class="synSpecial">%d</span><span class="synConstant"> exact digits&quot;</span>, mn, md, ml);
	
	<span class="synStatement">return</span> string(s);
}
</pre>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20100928/1285602920</link> 
    <pubDate>Mon, 27 Sep 2010 15:55:20 GMT</pubDate>
   </item>
  <item>
    <title>[SRM 483]SRM 483 Div1</title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a class="keyword" href="http://topcoder.g.hatena.ne.jp/keyword/SRM">SRM</a> 483 Div1 Room 4</p>
			<p>久々の <a class="keyword" href="http://topcoder.g.hatena.ne.jp/keyword/SRM">SRM</a>．</p>
			<p>250 pt. を取れていると思ったらまさかの Failed System Test.</p>
			<p>500 pt. を開いて他制約ナップサック（ナップサックが複数並列して存在するような問題）だと思い解き方に悩み，解けずじまい．</p>
			<p>0 point で rating down．<a class="keyword" href="http://topcoder.g.hatena.ne.jp/keyword/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%AE%E5%8B%89%E5%BC%B7">アルゴリズムの勉強</a>をちゃんとできないまま挑んでいるので，次あたりそろそろヤバそう．</p>
			<p>Room では target, vlad89 による 900 pt. 虐殺タイムが始まる．結果，意外と 250 も落ちている人が多かった．</p>
			<p>Petr がまさかの１問も解けていなかったせいで，今週は雨です．</p>

			<table>
				<tr><th>Coding Phase</th><td>153.28</td></tr>
				<tr><th>Challange Phase</th><td>0.00</td></tr>
				<tr><th>System Test</th><td>-153.28</td></tr>
				<tr><th>Point Total</th><td>0.00</td></tr>
				<tr><th>Division Placed</th><td>464</td></tr>
				<tr><th>Old Rating</th><td>1259</td></tr>
				<tr><th>Pating Change</th><td>-31</td></tr>
				<tr><th>New Rating</th><td>1228</td></tr>

			</table>

			<table>
				<tr><th>Problem</th><th>Problem Name</th><th>Coding Time</th><th>Status</th><th>Points</th></tr>
				<tr><td>250pt</td><td>BestApproximationDiv1</td><td>0:26:21.693</td><td>Failed System Test</td><td>153.28</td></tr>
				<tr><td>500pt</td><td>Bribes</td><td>0:48:25.257</td><td>Opened</td><td>0</td></tr>
				<tr><td>900pt</td><td>---</td><td>---</td><td>Unopend</td><td>0</td></tr>
			</table>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20100928/1285602919</link> 
    <pubDate>Mon, 27 Sep 2010 15:55:19 GMT</pubDate>
   </item>
  <item>
    <title>[golf][anagol]Anarchy Golf 339. Puyo Puyo</title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a href="http://golf.shinh.org/p.rb?Puyo+Puyo" target="_blank">http://golf.shinh.org/p.rb?Puyo+Puyo</a></p>
			<p>初めて出題した golf の問題なので解説を書いてみようと思う．</p>
			<h4>問題</h4>
			<p>ぷよぷよのスクリーンが与えられるので連鎖後のスクリーンの状態と連鎖数を表示する．</p>
			<p>ぷよは r, g, b, y, p で表示される．もちろん赤，緑，青，黄，紫に対応している．</p>
			<p>スクリーンのサイズはぷよぷよの通り横6縦13である．</p>
			<p>本来のぷよぷよでは13段目はスクリーン外で見えない＆消えないという性質を持つので，幽霊連鎖というものが可能だが，今回はこの仕様は省いた．</p>
			<a name="seemore"></a>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20100926/1285427454</link> 
    <pubDate>Sat, 25 Sep 2010 15:10:54 GMT</pubDate>
   </item>
  <item>
    <title>[★★★☆☆][TCO 2010][2D matrix]TopCoder Open 2010 Algorithm Qualification Round 3 </title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a href="http://www.topcoder.com/stat?c=problem_statement&pm=10929&rd=14278" target="_blank">http://www.topcoder.com/stat?c=problem_statement&amp;pm=10929&amp;rd=14278</a></p>
			<h4>問題</h4>
			<p>横 W 縦 H の芝生をダイアモンドカッターが切っていく．カッターの初期位置と，移動方向のプログラムが与えられたときに，芝生が何分割されているかを答える．</p>
			<h4>アプローチ</h4>
			<p>ある位置の芝生の左が切れているかどうかのフラグと上が切れているかどうかのフラグを用意しておき，プログラムを走らせて切っていき，最後に領域を数える．</p>
			<p>領域を数えるのは再帰（スタック，深さ優先）だと最悪 10^6 になるのでオーバーフローする．queue を使って幅優先探索を行う．</p>
			<h4>ソースコード</h4>
<pre class="syntax-highlight">
#include &amp;#<span class="synConstant">60</span>;cstdio&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;vector&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;iostream&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;sstream&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;queue&amp;#<span class="synConstant">62</span>;

<span class="synStatement">using</span> <span class="synType">namespace</span> std;

<span class="synType">typedef</span> pair&amp;#<span class="synConstant">60</span>;<span class="synType">int</span>,<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; PII;

<span class="synPreProc">#define sz(a) </span><span class="synType">int</span><span class="synPreProc">((a).size())</span>
<span class="synPreProc">#define pb push_back</span>
<span class="synPreProc">#define mp make_pair</span>
<span class="synPreProc">#define Forall(i,v)   </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=</span><span class="synConstant">0</span><span class="synPreProc">;i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(</span><span class="synType">int</span><span class="synPreProc">)v.size();++i)</span>
<span class="synPreProc">#define For(i,a,b)    </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=(a);i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(b);++i)</span>
<span class="synPreProc">#define Rep(i,n)      </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=</span><span class="synConstant">0</span><span class="synPreProc">;i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(n);++i)</span>

<span class="synType">bool</span> cutu[<span class="synConstant">1024</span>][<span class="synConstant">1024</span>];
<span class="synType">bool</span> cutl[<span class="synConstant">1024</span>][<span class="synConstant">1024</span>];
<span class="synType">bool</span> glass[<span class="synConstant">1024</span>][<span class="synConstant">1024</span>];

queue&amp;#<span class="synConstant">60</span>;PII&amp;#<span class="synConstant">62</span>; q;

<span class="synType">int</span> pieces(<span class="synType">int</span> W, <span class="synType">int</span> H, <span class="synType">int</span> startx, <span class="synType">int</span> starty, vector &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>; program)
{
	Rep(j,H+<span class="synConstant">1</span>) Rep(i,W+<span class="synConstant">1</span>)
		cutu[j][i] = cutl[j][i] = glass[j][i] = <span class="synConstant">false</span>;
	Rep(i,W+<span class="synConstant">1</span>)
		cutu[<span class="synConstant">0</span>][i] = cutu[H][i] = <span class="synConstant">true</span>;
	Rep(j,H+<span class="synConstant">1</span>)
		cutl[j][<span class="synConstant">0</span>] = cutl[j][W] = <span class="synConstant">true</span>;
	
	<span class="synType">int</span> x = startx;
	<span class="synType">int</span> y = starty;
	
	Rep(pp,sz(program)) Rep(p,sz(program[pp]))
	{
		<span class="synStatement">switch</span>(program[pp][p])
		{
		<span class="synStatement">case</span> <span class="synConstant">'U'</span>:
			cutl[--y][x] = <span class="synConstant">true</span>;
			<span class="synStatement">break</span>;
		<span class="synStatement">case</span> <span class="synConstant">'D'</span>:
			cutl[y++][x] = <span class="synConstant">true</span>;
			<span class="synStatement">break</span>;
		<span class="synStatement">case</span> <span class="synConstant">'L'</span>:
			cutu[y][--x] = <span class="synConstant">true</span>;
			<span class="synStatement">break</span>;
		<span class="synStatement">case</span> <span class="synConstant">'R'</span>:
			cutu[y][x++] = <span class="synConstant">true</span>;
			<span class="synStatement">break</span>;
		}
	}
	
	<span class="synType">int</span> c = <span class="synConstant">0</span>;
	Rep(j,H) Rep(i,W) <span class="synStatement">if</span>(!glass[j][i])
	{
		c++;
		q.push(mp(i,j));
		<span class="synStatement">while</span>(!q.empty())
		{
			PII co = q.front(); q.pop();
			<span class="synType">int</span> x = co.first;
			<span class="synType">int</span> y = co.second;
			<span class="synStatement">if</span>(glass[y][x])
				<span class="synStatement">continue</span>;
			glass[y][x] = <span class="synConstant">true</span>;
			<span class="synStatement">if</span>(!cutu[y][x])   q.push(mp(x,y-<span class="synConstant">1</span>));
			<span class="synStatement">if</span>(!cutu[y+<span class="synConstant">1</span>][x]) q.push(mp(x,y+<span class="synConstant">1</span>));
			<span class="synStatement">if</span>(!cutl[y][x])   q.push(mp(x-<span class="synConstant">1</span>,y));
			<span class="synStatement">if</span>(!cutl[y][x+<span class="synConstant">1</span>]) q.push(mp(x+<span class="synConstant">1</span>,y));
		}
	}
	
	<span class="synStatement">return</span> c;
}
</pre>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20100528/1275031880</link> 
    <pubDate>Fri, 28 May 2010 07:31:20 GMT</pubDate>
   </item>
  <item>
    <title>[★★☆☆☆][TCO 2010]TopCoder Open 2010 Algorithm Qualification Round 3 WhatsThisChord</title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a href="http://www.topcoder.com/stat?c=problem_statement&pm=10927&rd=14278" target="_blank">http://www.topcoder.com/stat?c=problem_statement&amp;pm=10927&amp;rd=14278</a></p>
			<h4>問題</h4>
			<p>ギターの弦を押さえる時にどのコードになるのかを求める問題．６つの弦のどのフレットを押さえるのかが数値で与えられる．特に 0 なら開放弦，-1 なら弾かない，である．どの音の Major か Minor なのかを判定する．</p>
			<h4>アプローチ</h4>
			<p>全探索でも全く問題ないが，コードが汚くなる．</p>
			<p>とりあえず押さえる弦を配列に突っ込んで 12 の剰余を取って unique をかけて正規化する(*1)．ここで要素が 3 つでなければ終了．3 つの場合，その後ろにそれぞれ 12 を足した値を追加しておくと(*2)後のコード判定がすっきりして楽になる(*3)．</p>
			<h4>ソースコード</h4>
<pre class="syntax-highlight">
#include &amp;#<span class="synConstant">60</span>;cstdio&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;vector&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;iostream&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;sstream&amp;#<span class="synConstant">62</span>;

<span class="synStatement">using</span> <span class="synType">namespace</span> std;

<span class="synType">typedef</span> vector&amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; VI;

<span class="synPreProc">#define pb push_back</span>
<span class="synPreProc">#define sz(a) </span><span class="synType">int</span><span class="synPreProc">((a).size())</span>

<span class="synPreProc">#define For(i,a,b)    </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=(a);i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(b);++i)</span>
<span class="synPreProc">#define Rep(i,n)      </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=</span><span class="synConstant">0</span><span class="synPreProc">;i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(n);++i)</span>

<span class="synPreProc">#define Unique(v) \</span>
<span class="synPreProc">	sort((v).begin(),(v).end());\</span>
<span class="synPreProc">	v.resize(unique((v).begin(),(v).end())-(v).begin());</span>
	
<span class="synType">int</span> s[<span class="synConstant">6</span>] = {<span class="synConstant">4</span>,<span class="synConstant">9</span>,<span class="synConstant">2</span>,<span class="synConstant">7</span>,<span class="synConstant">11</span>,<span class="synConstant">4</span>};
string name[<span class="synConstant">12</span>] = {<span class="synConstant">&quot;C&quot;</span>,<span class="synConstant">&quot;C#&quot;</span>,<span class="synConstant">&quot;D&quot;</span>,<span class="synConstant">&quot;D#&quot;</span>,<span class="synConstant">&quot;E&quot;</span>,<span class="synConstant">&quot;F&quot;</span>,<span class="synConstant">&quot;F#&quot;</span>,<span class="synConstant">&quot;G&quot;</span>,<span class="synConstant">&quot;G#&quot;</span>,<span class="synConstant">&quot;A&quot;</span>,<span class="synConstant">&quot;A#&quot;</span>,<span class="synConstant">&quot;B&quot;</span>};

string classify(vector&amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; chord)
{
	VI c;
	Rep(i,<span class="synConstant">6</span>) <span class="synStatement">if</span>(chord[i]&amp;#<span class="synConstant">62</span>;=<span class="synConstant">0</span>)
		c.pb((chord[i]+s[i])%<span class="synConstant">12</span>);
	<span class="synComment">// (*1)</span>
	Unique(c);
	
	<span class="synStatement">if</span>(sz(c)!=<span class="synConstant">3</span>)
		<span class="synStatement">return</span> <span class="synConstant">&quot;&quot;</span>;
	
	<span class="synComment">// (*2)</span>
	Rep(i,<span class="synConstant">3</span>)
		c.pb(c[i]+<span class="synConstant">12</span>);
	
	<span class="synComment">// (*3)</span>
	Rep(i,<span class="synConstant">3</span>)
	{
		<span class="synStatement">if</span>(c[i+<span class="synConstant">1</span>]-c[i]==<span class="synConstant">4</span> &amp;#<span class="synConstant">38</span>;&amp;#<span class="synConstant">38</span>; c[i+<span class="synConstant">2</span>]-c[i+<span class="synConstant">1</span>]==<span class="synConstant">3</span>)
			<span class="synStatement">return</span> name[c[i]]+<span class="synConstant">&quot; Major&quot;</span>;
		<span class="synStatement">if</span>(c[i+<span class="synConstant">1</span>]-c[i]==<span class="synConstant">3</span> &amp;#<span class="synConstant">38</span>;&amp;#<span class="synConstant">38</span>; c[i+<span class="synConstant">2</span>]-c[i+<span class="synConstant">1</span>]==<span class="synConstant">4</span>)
			<span class="synStatement">return</span> name[c[i]]+<span class="synConstant">&quot; Minor&quot;</span>;
	}
	
	<span class="synStatement">return</span> <span class="synConstant">&quot;&quot;</span>;
}
</pre>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20100528/1275031879</link> 
    <pubDate>Fri, 28 May 2010 07:31:19 GMT</pubDate>
   </item>
  <item>
    <title>[★☆☆☆☆][TCO 2010]TopCoder Open 2010 Algorithm Qualification Round 3 SumRectangle</title> 
    <description>
    <![CDATA[
    
		<div class="section">
			<p><a href="http://www.topcoder.com/stat?c=problem_statement&pm=10948&rd=14278" target="_blank">http://www.topcoder.com/stat?c=problem_statement&amp;pm=10948&amp;rd=14278</a></p>
			<h4>問題</h4>
			<p>二次元の表の一番左の列と一番上の行の値が与えられている．あるセルの値は下と右下と右のセルの和になっている．表の一番右下の値を求める．</p>
			<h4>アプローチ</h4>
			<p>特に工夫は必要なし．</p>
			<h4>ソースコード</h4>
<pre class="syntax-highlight">
#include &amp;#<span class="synConstant">60</span>;cstdio&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;string&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;vector&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;iostream&amp;#<span class="synConstant">62</span>;
#include &amp;#<span class="synConstant">60</span>;sstream&amp;#<span class="synConstant">62</span>;

<span class="synPreProc">#define Forall(i,v)   </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=</span><span class="synConstant">0</span><span class="synPreProc">;i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(</span><span class="synType">int</span><span class="synPreProc">)v.size();++i)</span>
<span class="synPreProc">#define For(i,a,b)    </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=(a);i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(b);++i)</span>
<span class="synPreProc">#define Rep(i,n)      </span><span class="synStatement">for</span><span class="synPreProc">(</span><span class="synType">int</span><span class="synPreProc"> i=</span><span class="synConstant">0</span><span class="synPreProc">;i&amp;#</span><span class="synConstant">60</span><span class="synPreProc">;(n);++i)</span>

<span class="synPreProc">#define sz(a) </span><span class="synType">int</span><span class="synPreProc">((a).size())</span>

<span class="synStatement">using</span> <span class="synType">namespace</span> std;

<span class="synType">int</span> m[<span class="synConstant">10</span>][<span class="synConstant">10</span>];

<span class="synType">int</span> getCorner(vector &amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; leftColumn, vector &amp;#<span class="synConstant">60</span>;<span class="synType">int</span>&amp;#<span class="synConstant">62</span>; topRow)
{
	<span class="synType">int</span> nl = leftColumn;
	<span class="synType">int</span> nt = topRow;
	
	Rep(j,nl)
		m[j][<span class="synConstant">0</span>] = leftColumn[j];
	Rep(i,nt)
		m[<span class="synConstant">0</span>][i] = topRow[i];
	
	For(j,<span class="synConstant">1</span>,nl) For(i,<span class="synConstant">1</span>,nt)
		m[j][i] = m[j-<span class="synConstant">1</span>][i-<span class="synConstant">1</span>] - m[j][i-<span class="synConstant">1</span>] - m[j-<span class="synConstant">1</span>][i];
	
	<span class="synStatement">return</span> m[nl-<span class="synConstant">1</span>][nt-<span class="synConstant">1</span>];
}
</pre>

		</div>

    ]]>
    </description>
    <link>http://topcoder.g.hatena.ne.jp/yuyarin/20100528/1275031878</link> 
    <pubDate>Fri, 28 May 2010 07:31:18 GMT</pubDate>
   </item>
</channel>
</rss>
