結果

問題 No.334 門松ゲーム
ユーザー jjjj
提出日時 2017-02-04 00:21:07
言語 Fortran
(gFortran 13.2.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,827 bytes
コンパイル時間 1,811 ms
コンパイル使用メモリ 34,048 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-06-06 14:03:34
合計ジャッジ時間 1,477 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 1 ms
6,940 KB
testcase_02 AC 1 ms
6,940 KB
testcase_03 AC 1 ms
6,944 KB
testcase_04 AC 1 ms
6,940 KB
testcase_05 AC 1 ms
6,940 KB
testcase_06 AC 1 ms
6,940 KB
testcase_07 AC 1 ms
6,944 KB
testcase_08 AC 1 ms
6,944 KB
testcase_09 AC 1 ms
6,940 KB
testcase_10 AC 2 ms
6,940 KB
testcase_11 AC 1 ms
6,944 KB
testcase_12 AC 2 ms
6,940 KB
testcase_13 AC 1 ms
6,944 KB
testcase_14 AC 1 ms
6,944 KB
testcase_15 AC 1 ms
6,944 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.f90:67:30:

   67 |     write(cformat(5:9),'(i0)'),size(array)
      |                              1
Warning: Legacy Extension: Comma before i/o item list at (1)

ソースコード

diff #

program main
  implicit none
  integer::N,depth=0
  integer::K(12)
  logical::flag
  read *,N
  read *,K(1:N)
  flag = win(K(1:N), depth)
  if(flag.eqv..false.) print '("-1")'
contains
  logical recursive function win(K, depth) result(w)
    integer::K(:)
    integer,allocatable::L(:)
    integer::a,b,c,s,ka,kb,kc, depth
    logical,allocatable::mask(:)
    s = SIZE(K)
    if(s.le.2) then
       w = .false.
       return
    else
       allocate(mask(s))
       allocate(L(s-3))
       mask = .true.
       do a=1,s-2
          ka = K(a)
          do b=a+1,s-1
             kb = K(b)
             if(kb.eq.ka) cycle
             do c=b+1,s
                kc = K(c)
!print '(i0,":",3(i0,1x),":",3(i0,1x))',depth,a,b,c, ka,kb,kc
                if(.not.is_kadomatsu(ka,kb,kc)) cycle
                mask(a)=.false.
                mask(b)=.false.
                mask(c)=.false.
                L = PACK(K,mask)
                if(win(L, depth+1).eqv..false.) then
                   w = .true.
                   if(depth.eq.0) then
                      print '(3(i0,1x))', a-1,b-1,c-1
                   end if
                   return
                end if
                mask(c)=.true.
             end do
             mask(b)=.true.
          end do
          mask(a)=.true.
       end do
       w = .false.
    end if
  end function win
  logical function is_kadomatsu(a,b,c) result(k)
    integer::a,b,c
    if(a.eq.b.or.b.eq.c.or.a.eq.b.or. &
         (a.gt.b.and.b.gt.c) .or. &
         (a.lt.b.and.b.lt.c)) then
       k = .false.
    else
       k = .true.
    end if
  end function is_kadomatsu

  subroutine aprinter(array)
    integer*8::array(:)
    character*32::cformat='(i0,     (1x,i0))'
    write(cformat(5:9),'(i0)'),size(array)
    write(*,cformat) array
  end subroutine aprinter
end program main
0