カメヲラボ

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

postfix to infix

忘れてた!!!とりあえず急いで縮めたけど、上位にはぜんぜん届いてないなぁ(´ω`)演算子の優先度をスタックに積むところをどうにかできるような気がしつつ、結局良い方法が思いつきませんでした。これから仕事に戻らないといけないので、今回は186Bでfinish。かな〜り悔しい。仕事に戻ったときに何か思いついたらもっと悔しい、きっと。

追記:
っちゅうわけで、締め切りになりました。上位はアルゴリズムが違うんだろなーと思ってましたが、なるほど後ろからやっつけるわけですね。後ろから…というのはちょっとやりかけて、難しそうなのでやめた記憶が^^;私はひたすら普通にスタックを使う方法でやってました。sprintfの書式文字列が一つにまとまったのと、括弧をつけるかどうかの判定がそこそこ簡単にできたので、なかなかよろしいかなーと思いましたが、配列を2つ使わないといけないのと文字列をpushする際にsprintfなりstrcpyなんかで一旦別のバッファに置かねばならない部分が痛い。まあ完敗ですねー。ちぇっっ

w[99],t[99][99],c,i,k;

main(n,s)
{
  for(;
    read(0,&c,1);
    k=w[i]=n>9?*t[++i]=c,0:n>0?
      sprintf(s,
        "%s%c%s%c(%s)"+k*4,
        !sprintf(t,n/5*w[i]%5?""-4:s,s=t+i)+t,
        c,t+i--,k&=k<n+c/45
      ),n:puts(s)
  )n=c-42?:5;
}