こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

最長の区間 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

以下のように実装しました。

package main
import "fmt"
func main(){
    var n, k int
    fmt.Scan(&n, &k)
    a := make([]int, n)
    for i := 0; i < n; i++ {
        fmt.Scan(&a[i])
    }
    x := 1
    c := 1
    for i := 0; i < n; i++ {
        x *= a[i]
        if x == 0 {
            c = 1
            x = 1
        } else if x >= k {
            fmt.Println(c)
            return
        }
        c++
    }
}

ですがこれだと攻略はできませんでした。。

回答を見ながら修正しました。

package main
import "fmt"
func main(){
    var n, k int
    fmt.Scan(&n, &k)
    a := make([]int, n)
    for i := 0; i < n; i++ {
        fmt.Scan(&a[i])
    }
    start := 0
    end := 0
    count := 1000000
    mul := func(data []int) int {
        result := 1
        for _, v := range data {
            result *= v
        }
        return result
    }
    for end < n && start <= end {
        if mul(a[start: end + 1]) >= k {
            if end - start + 1 < count {
                count = end - start + 1
            }
            start += 1
        } else if a[end] == 0 {
            start = end + 1
            end += 1
        } else {
            end += 1
        }
    }
    fmt.Println(count)
}

ですがいまいち理解できていません。クソー

まぁいいでしょう。。

AIと壁打ちしながらもうちょい理解を深めていきます。