CF750C New Year and Rating 题解

· · 个人记录

设第一场比赛前的初始 rating 为 r

设从开始到第 i 场比赛之前(注意是比赛前),rating 的累计变化量为 s

这样可以得到 n 个不等式。

r 的最小值为 \textit{minR}(初始值为 -\infty),最大值为 \textit{maxR}(初始值为 \infty)。

遍历这 n 个不等式,同时维护 \textit{minR} 的最大值,和 \textit{maxR} 的最小值。

遍历结束后:

package main
import("bufio";."fmt";"os")
func min(a, b int) int { if b < a { return b }; return a }
func max(a, b int) int { if b > a { return b }; return a }

func main() {
    in := bufio.NewReader(os.Stdin)
    var n, c, d, s int
    minR, maxR := int(-1e9), int(1e9)
    for Fscan(in, &n); n > 0; n-- {
        Fscan(in, &c, &d)
        if d == 1 {
            minR = max(minR, 1900-s)
        } else {
            maxR = min(maxR, 1899-s)
        }
        s += c
    }
    if minR > maxR {
        Print("Impossible")
    } else if maxR == 1e9 {
        Print("Infinity")
    } else {
        Print(maxR + s)
    }
}