AtCoder ABC140 C - Maximal Value (Go)
irisruneです。台風の影響により、今週は火・水・金の投稿となります。
問題
https://atcoder.jp/contests/abc140/tasks/abc140_c
からを逆算するにはどうすればいいかという問題です。
package main import ( "bufio" "fmt" "os" "strconv" ) var sc *bufio.Scanner func nextInt() int { sc.Scan() i, e := strconv.Atoi(sc.Text()) if e != nil { panic(e) } return i } func minInt(a, b int) int { if a < b { return a } return b } func main() { sc = bufio.NewScanner(os.Stdin) sc.Split(bufio.ScanWords) n := nextInt() ans := 0 bPrev := -1 for i := 0; i < n-1; i++ { b := nextInt() switch { case i == 0: ans += b default: ans += minInt(b, bPrev) } bPrev = b } fmt.Println(ans + bPrev) }
からを求める方法として、問題文でが示されています。逆にからを求める方法を考えると、となることがわかります。
ここから不等号を等号に置き換えるだけでの最大値を求められますが、に対してであるため、については求め方が異なることに注意が必要です。具体的にはと置き換える必要があります。
なお、とおいての数列の両端に追加すると、についても他のと同様に求めることができるためコードがより簡潔になります。
雑記
- 今週は水曜日にABC140-D、金曜日にARC059-E(部分点+満点)を投稿予定です。