Загрузка данных


package main

import (
	"fmt"
)

func Min(a int64, b int64) int64 {
	if a <= b {
		return a
	}
	return b
}

func main() {
	var n, x int64
	fmt.Scanf("%d %d", &n, &x)

	a := make([]int64, n)
	diff := make([]int64, n - 1)
	for i := int64(0); i < n; i++ {
		fmt.Scanf("%d", &a[i])
		if i > 0 {
			diff[i - 1] = a[i] / a[i - 1]
		}
	}

	copyX := x
	processedX := make([]int64, n)
	for i := n - 1; i >= 0; i-- {
		processedX[i] = copyX / a[i]
		copyX -= processedX[i] * a[i]
	}

	dp := make([][]int64, n)
	for i := int64(0); i < n; i++ {
		dp[i] = make([]int64, 2)
	}

	dp[0][0] = processedX[0]
	if n > 1 {
		dp[0][1] = diff[0] - processedX[0]
	}
	for i := int64(1); i < n; i++ {
		if i < n - 1 {
			dp[i][0] = Min(
				dp[i - 1][0] + processedX[i],
				dp[i - 1][1] + processedX[i] + 1,
			)
			dp[i][1] = Min(
				dp[i - 1][0] + diff[i] - processedX[i],
				dp[i - 1][1] + diff[i] - processedX[i] - 1,
			)
		} else {
			dp[i][0] = Min(
				dp[i - 1][0] + processedX[i],
				dp[i - 1][1] + processedX[i] + 1,
			)
		}
	}

	fmt.Println(dp[n - 1][0])
}