subroutine kolisiones (n,p,adaptacion)
  implicit none
  integer :: p(1:n)
  integer,allocatable :: diag(:), antidiag(:)
  integer :: nDia, i, n
  double precision :: adaptacion, contador
  nDia = 2*n-1
  allocate (diag(1:nDia), antidiag(1:nDia))
  do i=1,nDia
     diag(i)=0
     antidiag(i)=0
  end do
  do i=1,n
     diag(i+p(i)-1) = diag(i+p(i)-1) + 1
     antidiag(n-i+p(i)) = antidiag(n-i+p(i))+1
  end do
  adaptacion=0
  do i=1,nDia
     contador = 0
     if (diag(i)>0) contador = contador + diag(i) - 1
     if (antidiag(i)>0) contador = contador + antidiag(i) - 1
     adaptacion = adaptacion + contador / (n-abs(i-n))
  end do
end subroutine kolisiones

