こんにちは、ナナオです。
前回に引き続き競プロを実施していきたいと思います。
今回の問題は以下です。
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]の制約いっぱいまで計算しています。
どちらでも動作するので、お好みのほうでいいと思います。
ということで今回はこれで👍