とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

PKU JudgeOnline 1658 (8)

Welcome To PKU JudgeOnline 1658 -- Eva's Problem
えー…まだ続いています1658。新しいアルゴリズムを昨日突然思いついて意気揚々としていたわけですが,気がついたらid:kurimura:20051219にて5Bもブラッシュアップされて*1いました。a++&3なんて当たり前のことに気がつかなかった自分に凹んだりしましたが,現役の学生にいろいろ教えてもらってうれしい限り。
でもね…。(ネタバレが嫌な方は続きを見ないでねん)

kurimuraさんへC99の規格書(PDF)を全部読んだことがある*2言語オタクの私からもプレゼント:

main(a,b,c,d){for(gets(b);~scanf("%d",&b);)printf(a++&3?"%d ":"%d %d\n",c+=d=b-c,b-c-d?b/c*b:b+d);}

bは本来char**argvです。で,規格ではargvも*argvも**argvも書き換えることは認められているんです。そう,gets(b)は*argvを書き換えるのと等しい*3のでAccess Violationは起きないんです。
これで99B。ついに2桁です。これ以上はムリポ。1004も考えなきゃ…。

*1:100B!!!

*2:理解はしてない

*3:あくまで今回の処理系では。なんだかんだ言って,規格上未定義動作なコードですから。