カメヲラボ

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

きゅーちゃん

問題の概要は例によってnanagyouさんのとこから
http://geocities.yahoo.co.jp/gl/nanagyou/view/20070213/1171325087
手抜きですまぬのぅ。

キューに入ったn個の優先度つきジョブのうちm番目のものが何番目に出力されるかという問題。
入力はn,mに続いてn個の優先度なので、読み込み部分がちと難しい。私が書いてみたのはnだけ最初に読み込んで、残りは一気にfor文で読み込むという方法。これだとscanfを2回使ってしまっているけど、書式部分が同じなので変数を使って多少縮みます。不等号に=が入ってたり全体の構造が結構ややこしいので、じっくり考えればまだまだ短縮できるでしょうね。。。

v[],*p,*q,i;
main(n,s)
{
  for(gets(v);~scanf(s="%d\n",&n);printf(s,i-n))
  {
    for(i=-1;i<n;)scanf(s,++i+v);
    for(p=v;p;p[n]=*p,q-p<=n||*v*--n?q:p=0,*v-=*v?1:1-n)
      for(q=++p;*p>=*q++;);
  }
}