rope.go 583 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. const eps float64 = 0.0001
  6. func main() {
  7. var N, M int
  8. fmt.Scan(&N, &M)
  9. L := make([]int, N)
  10. max := 0
  11. for i := range L {
  12. fmt.Scan(&L[i])
  13. if max < L[i] {
  14. max = L[i]
  15. }
  16. }
  17. beg, end := 0.0, float64(max)
  18. for eps < end-beg { // Loop for 100 (or so) times is also valid.
  19. mid := (beg + end) / 2.0
  20. if solve(L, M, mid) {
  21. beg = mid
  22. } else {
  23. end = mid
  24. }
  25. }
  26. fmt.Printf("%.2f", beg)
  27. }
  28. func solve(L []int, M int, l float64) bool {
  29. cnt := 0
  30. for i := range L {
  31. length := float64(L[i])
  32. cnt += int(length / l)
  33. }
  34. return M <= cnt
  35. }