結果

問題 No.275 中央値を求めよ
コンテスト
ユーザー jj
提出日時 2016-07-22 12:49:54
言語 Fortran
(gFortran 15.2.0)
コンパイル:
gfortran _filename_ -O2 -o ./a.out
実行:
./a.out
結果
AC  
実行時間 1 ms / 1,000 ms
コード長 887 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 261 ms
コンパイル使用メモリ 44,484 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2026-03-11 04:01:39
合計ジャッジ時間 1,265 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 38
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

recursive function qsort(x) result(y)
  integer,intent(in) ::x(:)
  integer,allocatable::y(:)
  integer::pivot,total
  total = size(x)
  if (total <=1) then
     y = x
  else
     pivot = x(total/2+1)
     y = [qsort(pack(x, x .lt. pivot)), &
          (/(pivot, i=1,COUNT(x.eq.pivot))/), &
          qsort(pack(x, x .gt. pivot))]
  endif
end function qsort

program main
  interface
     recursive function qsort(x) result(y)
       integer,intent(in) ::x(:)
       integer,allocatable::y(:)
     end function qsort
  end interface
  integer::total
  character*6000::input
  integer,allocatable::x(:), y(:)
  read *,total
  allocate(x(total))
  allocate(y(total))

  read '(a)', input
  read (input,*) (x(i),i=1,total)

  y = qsort(x)

  if (mod(total,2).eq.1) then
     print '(f0.1)',y(total/2+1)*1.0
  else
     print '(f0.1)',(y(total/2)+y(total/2+1)) /2.0
  endif
end program main
0