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

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

今回の問題は以下です。

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

実装

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

package main
import "fmt"
func main(){
    var n, m int
    fmt.Scan(&n, &m)
    
    a := make([]int, n)
    x := 0
    s := make([]int, n)
    for i := 0; i < n; i++ {
        fmt.Scan(&a[i])
        x += a[i]
        s[i] = x
    }
    
    sum := 0
    d := 0
    l := 0
    for r := 0; r < n; r++ {
        sum += a[r]
        for sum > m {
            sum -= a[l]
            l++
        }
        c := r - l + 1
        if d < c {
            d = c
        }
    }
    
    fmt.Println(d)
}

なんででしょう、しゃくとり法がなぜか直感的にちゃんと理解できていない…

もっとAIと壁打ちして、ちゃんと理解できるようにしないと…!!

ということで今回はこれで👍