Ants
- 変態最短最速省メモリコード
http://d.hatena.ne.jp/Ozy/20070125#p2
のコードはまだ正常だったのかもしれない。上記リンクのコードと今回のコードを見比べれば、その変態っぷりは一目瞭然。変態が極まってしまったのは、kurimuraさんとhinoeさんの変態っぷりとやねさんの煽りのせいです。本当にありがとうございました。
main関数の第2引数以降は大体どこかのアドレスを指している場合が多いので、たまたま\0を指していれば1回目の出力を上手くすり抜けられます。運まかせ。Cの場合は6番目の変数で成功。かと言って変数を6個だけにすると上手くいきません。極めて微妙。この問題はインプットの量が膨大なので、入出力も高速になるような工夫が必要です。scanfの代わりにgets+atoiでややスピードアップ。さらにGCCのfmax/fminは使わずにすべて条件演算子を使い、出力はprintfよりもsprintf+writeを使う。これで高速化だけでなく省メモリも達成される。
main(n,v,a,b,m,t,k) { for(;b=n--? a=(k=(k=atoi(gets(v)))>m-k?k:m-k)<a?k:a,b>k?b:k: ~scanf(a=t="%d %d\n",&m,&n,write(1,v,sprintf(v,t,m-a,b)));); }
続いて最短コード124B。
main(n,v,a,b,m,k,t) { for(;b=n--? a=fmin(a,k=fmax(m-k,k=atoi(gets(v)))),b>k?b:k: ~scanf(a=t="%d %d\n",&m,&n,printf(t,m-a,b));); }
最短コードのためにGCCのfmax/fminを使うのだけど、条件演算子の方が短くなる場合もあるので見逃さずに。GCCでは第7引数のアドレスがヌルポイントでした。
G++では最短が125Bなので、GCCが上回ってしまいました(;´д`)