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

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

今回の問題は以下です。

2項間漸化式 2 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

このように実装しました。

package main
import "fmt"
func main(){
    var x, d, q int
    fmt.Scan(&x, &d, &q)
    k := make([]int, q)
    max := 0
    for i := 0; i < q; i++ {
        fmt.Scan(&k[i])
        if i == q - 1 {
            max = k[i]
        }
    }
    a := make([]int, max)
    a[0] = x
    for i := 1; i < max; i++ {
        a[i] = a[i - 1] + d
    }
    for i := 0; i < q; i++ {
        fmt.Println(a[k[i] - 1])
    }
}

ですがこれだと通りませんでした。。

k_Qが必ずmaxになるわけではないようです。

ということで少し修正しました。

package main
import "fmt"
func main(){
    var x, d, q int
    fmt.Scan(&x, &d, &q)
    k := make([]int, q)
    max := 0
    for i := 0; i < q; i++ {
        fmt.Scan(&k[i])
        if max < k[i] {
            max = k[i]
        }
    }
    a := make([]int, max)
    a[0] = x
    for i := 1; i < max; i++ {
        a[i] = a[i - 1] + d
    }
    for i := 0; i < q; i++ {
        fmt.Println(a[k[i] - 1])
    }
}

これでうまく動作しました。

ちなみに公式の解説ではaをa[1000]の制約いっぱいまで計算しています。

どちらでも動作するので、お好みのほうでいいと思います。

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