結果
| 問題 | No.673 カブトムシ | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2018-04-14 00:07:36 | 
| 言語 | Fortran (gFortran 14.2.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 1 ms / 2,000 ms | 
| コード長 | 1,690 bytes | 
| コンパイル時間 | 1,363 ms | 
| コンパイル使用メモリ | 35,072 KB | 
| 実行使用メモリ | 6,944 KB | 
| 最終ジャッジ日時 | 2024-06-30 05:55:12 | 
| 合計ジャッジ時間 | 1,082 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 14 | 
コンパイルメッセージ
Main.f90:9:25:
    9 |         h=size(a)/size(a(0,:))
      |                         1
Warning: Array reference at (1) is out of bounds (0 < 1) in dimension 1
Main.f90:10:17:
   10 |         w=size(b(0,:))
      |                 1
Warning: Array reference at (1) is out of bounds (0 < 1) in dimension 1
Main.f90:11:25:
   11 |         m=size(b)/size(b(0,:))
      |                         1
Warning: Array reference at (1) is out of bounds (0 < 1) in dimension 1
            
            ソースコード
module md
contains
    function mul(a,b,mo)
        implicit none
        integer::i,j,k,h,w,m
        integer(kind=8),intent(in)::a(:,:),b(:,:),mo
        integer(kind=8),allocatable::mul(:,:)
        h=size(a)/size(a(0,:))
        w=size(b(0,:))
        m=size(b)/size(b(0,:))
        allocate(mul(h,w))
        do i=1,h
            do j=1,w
                mul(i,j)=0
            end do
        end do
        do i=1,h
            do j=1,w
                do k=1,m
                    mul(i,j)=mul(i,j)+mod(a(i,k)*b(k,j),mo)
                    mul(i,j)=mod(mul(i,j),mo)
                end do
            end do
        end do
    end function
    function pow(a,n,mo)
        integer(kind=8),value::n,mo
        integer(kind=8)::a(:,:)
        integer(kind=8)::pow(2,2)
        do i=1,2
            do j=1,2
                if(i==j)then
                    pow(i,j)=1
                else
                    pow(i,j)=0
                end if
            end do
        end do
        do while(n>0)
            if(mod(n,2)==1)pow=mul(pow,a,mo)
            n=n/2
            a=mul(a,a,mo)
        end do
    end function
    function inv(a,mo)
        integer(kind=8)::mo
        integer(kind=8)::a(:,:)
        integer(kind=8),allocatable::inv(:,:)
        inv=pow(a,mo-2,mo)
    end function
end module
program main
    use md
    implicit none
    integer(kind=8)::b,c,d
    integer(kind=8)::ans,mat(2,2),vec(2,1)
    integer(kind=8),parameter::mo=1000000007
    read*,b,c,d
    b=mod(b,mo)
    c=mod(c,mo)
    vec(1,1)=0
    vec(2,1)=b
    mat(1,1)=c
    mat(1,2)=c
    mat(2,1)=0
    mat(2,2)=1
    mat=pow(mat,d,mo)
    vec=mul(mat,vec,mo)
    print*,vec(1,1)
end program
            
            
            
        