あるエンジニアのAtCoder奮闘記

東京都港区にあるアミフィアブル株式会社のエンジニアが、AtCoderで解いた問題について振り返ったりしていく会社公認のブログです。

AtCoder ABC 127 C - Prison (Go)

irisruneです。水パフォですが久々にレートが伸びて嬉しい気分ですね。

atcoder.jp

最近の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 maxInt(a, b int) int {
    if a > b {
        return a
    }
    return b
}

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, m := nextInt(), nextInt()

    maxL, minR := 1, n
    for i := 0; i < m; i++ {
        l, r := nextInt(), nextInt()
        maxL, minR = maxInt(maxL, l), minInt(minR, r)
    }

    fmt.Println(maxInt(0, minR-maxL+1))
}

公式解説でいうところの考え方1の解き方です。単純にLの最大値とRの最小値を求めてそこから答えを導き出すだけでした。

考え方2についても考察してみましたがコード自体は結局変わらなさそうです。

雑記

  • ABC128は遅刻確定したのと2日連続参加の気力はなかったのとで未参加でした。