結果

問題 No.43 野球の試合
ユーザー jjjj
提出日時 2017-01-29 03:36:39
言語 Fortran
(gFortran 13.2.0)
結果
RE  
実行時間 -
コード長 1,812 bytes
コンパイル時間 191 ms
コンパイル使用メモリ 30,688 KB
実行使用メモリ 4,880 KB
最終ジャッジ日時 2023-08-25 14:16:36
合計ジャッジ時間 1,205 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,384 KB
testcase_01 AC 1 ms
4,380 KB
testcase_02 RE -
testcase_03 RE -
testcase_04 RE -
testcase_05 AC 2 ms
4,376 KB
testcase_06 WA -
testcase_07 AC 1 ms
4,380 KB
testcase_08 WA -
testcase_09 AC 1 ms
4,376 KB
testcase_10 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

program main
  implicit none
  integer::N,i,j,tmp,winnum,num,minnum
  character::c
  character*6::S(6)
  integer*8,allocatable::games(:,:)
  integer*8,parameter::win=2,lose=0,self=9, none=1
  type game
     integer::a,b
  end type game
  type(game)::yet(10)
  yet(:)%a=0
  yet(:)%b=0

  read *,N
  allocate(games(1:N,1:N))
  read *,S(1:N)(1:N)

  do i=1,N
     games(i,i) = self
     do j=i+1,N
        c = S(i)(j:j)
        if(c.eq.'o') then
           games(i,j) = win
           games(j,i) = lose
        else if(c.eq.'x') then
           games(i,j) = lose
           games(j,i) = win
        else
           games(i,j) = none
           games(j,i) = none
        end if
     end do
  end do
  do j=2, N
     if(games(1,j).eq.none) then
        games(1,j) = win
        games(j,1) = lose
     end if
  end do
  winnum = COUNT(games(1,:).eq.win)
  do i=2, N
     tmp = COUNT(games(i,:).eq.win)
     if(winnum.gt.tmp) then
        do j=3, N
           if(games(i,j).eq.none) then
              games(i,j) = win
              games(j,i) = lose
           end if
        end do
     end if
  end do

  num = 0
  do i=1, N
     do j=i+1, N
        if(games(i,j).eq.none) then
           num = num + 1
           yet(num)%a = i
           yet(num)%b = j
        end if
     end do
  end do

  minnum = N
  do i=0, 2**num-1
     do j=0, num-1
        if(btest(i, j).eqv..true.) then
           games(yet(j)%a,yet(j)%b) = win
           games(yet(j)%b,yet(j)%a) = lose
        end if
     end do
     minnum = MIN(minnum, get_grade())
  end do
  print '(i0)', minnum
contains
  function get_grade() result(w)
    integer::i,j,w
    integer::totalwin(num)
    do i=1,N
       totalwin(i) = COUNT(games(i,:).eq.win)
    end do

    w = COUNT(totalwin(2:N).gt.totalwin(1)) + 1
  end function get_grade
end program main

0