カメヲラボ

主にプログラミングとお勉強全般について書いてます

PKU1011

Sticks(10)

最短コード250B 270byteあたりからは、ロベールさんと私でじわりじわりと削り合い。ちなみに、前回までで紹介しているコードは、はてな用に私が新しく書きなおしたものなので当時のコードとは違う部分もある。どんなインプットでも通るコードというのは、実…

Sticks(9)

意外と読める超短いコード 昨日のコードをさらに短くすると以下のようなコードになる。ここまでくると変数名を一文字にした方が逆に読みやすい。え?読みにくい?そうですか..(´ω`) int L,F,*I;c(n,l,p,j){ --I[p]; F=n?F:0;for(l-=p,j=l

Sticks(8)

準備 コードを短縮するには、通常のプログラミングで「だめ!」と言われていることをやっていかなければならない。ここからはプログラミングというよりパズルの問題。いかに少ない文字数で、同等の処理をさせられるか。

Sticks(7)

計算量を減らす ちょっとした演算でも数十万回呼ばれる可能性があるのであれば、それなりに時間がかかってしまう。演算回数を減らす努力は、再帰の仕組みを真面目に考えるきっかけになり、コードはスマートになっていく。そして、最終的にはコード短縮につな…

Sticks(6)

とりあえず変数を減らしていく inputの値は最大64個、それにあわせてlabelも64個。さらにinputはソートしなければならないとなれば、最短コードを目指すには無駄が多すぎる。簡単な方法はlabelを使わないことだが、inputを0で潰す方法は再帰コードで書くとba…

Sticks(5)

サンプルコード とりあえず、今まで書いたことを元にそのままコードを書いてみることにする。それなりに読める形で1100byte強。これを最終的に250byteほどに短縮するわけだが、このままではどう考えても不可能だ。基本的なアルゴリズムは変えずに、まずデー…

Sticks(4)

探索イメージ

Sticks(3)

ラベリング

Sticks(2)

基本アルゴリズム

Sticks(1)

同じ長さの棒を出来るだけたくさん作るには、

Sticks(0)

http://acm.pku.edu.cn/JudgeOnline/showproblem?problem_id=1011 長さがバラバラの棒の切れ端をつなぎ合わせて、同じ長さの棒を作る問題。つなぎ合わせた棒の長さは考えられる答えの中で最小でなければならない。なるべく短くするということは、同じ長さの…