カメヲラボ

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

Moo University - Team Tryouts(9)

ちょっと間が開いたので、これまでの内容を読みたい人は
http://www.4dm.org/PKU/2008.htmをドゾー。

最短コード263B

この問題はじわりじわりと削り続けて、なかなか終わりが見えない。このコードは最短では無いのかもしれないが、忘れないうちに公開しておく。ちなみに元のコードはhttp://d.hatena.ne.jp/Ozy/20060202#p1。k.inabaさんのすんばらしいアルゴリズムで書かれたコードは、最短コードを目指すためには最適だ。見比べるとわかると思うが、もはや原形をとどめていないw



i,s,t,A,B,h[2004],r[2000];
c(int*a,int*b){return*a-*b;}
main(n){
for(;~scanf("%d",h+i);++i)h[i]*=i>3?i%2?4*h[2]:h[1]:1;
for(;i--;){
for(;B=h[n+=3];A>h[3]|A<0||(r[t++]=B,r[t++]=B-4*A-2))
A=h[i]-h[--n]+h[3];
for(qsort(r,t,4,c);n=t;s=s<++B?B:s)B-=r[--t]&2;
}
printf("%d",s);
}


『こんなんで通るの!?!?』ってかんじだが、通った。
これより短いコードはがあるとすれば、それはhinoeさんが書いてくれるハズ。後はまかせた・・・ぐはっ。