結果
問題 | No.462 6日知らずのコンピュータ |
ユーザー |
![]() |
提出日時 | 2016-12-14 20:54:21 |
言語 | Fortran (gFortran 14.2.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,021 bytes |
コンパイル時間 | 2,064 ms |
コンパイル使用メモリ | 35,392 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-30 07:37:28 |
合計ジャッジ時間 | 4,216 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 84 |
ソースコード
program main implicit none integer*8::N,k,tmp,total,i,j integer*8,allocatable::a(:),b(:) integer*8,parameter::modular=1000000007 read *,N,k allocate(a(0:k+1)) allocate(b(0:k+1)) a(0) = 0 a(k+1) = 2**N-1 if(k.ne.0) then read *, a(1:k) end if b = qsort(a) do i=1, k-1 tmp = IAND(b(i),b(i+1)) if(tmp.ne.b(i)) then print '(i0)',0 return end if end do total = 1 do i=0, k tmp = 1 do j=2,POPCNT(b(i+1))-POPCNT(b(i)) tmp = MOD(tmp * j, modular) end do total = MOD(total * tmp, modular) end do print '(i0)', total contains recursive function qsort(x) result(y) integer*8,intent(in) ::x(:) integer*8,allocatable::y(:) integer*8::pivot,total total = size(x) if (total <=1) then y = x else pivot = x(total/2) y = [qsort(pack(x, x .lt. pivot)), & pack(x, x .eq. pivot), & qsort(pack(x, x .gt. pivot))] endif end function qsort end program main