CF750C New Year and Rating 题解
设第一场比赛前的初始 rating 为
设从开始到第
- 如果第
i 场比赛是 div.1,那么有r+s \ge 1900 ,即r \ge 1900-s 。 - 如果第
i 场比赛是 div.2,那么有r+s \le 1899 ,即r \le 1899-s 。
这样可以得到
设
遍历这
遍历结束后:
- 如果
\textit{minR} >\textit{maxR} ,矛盾,输出\texttt{Impossible} 。 - 否则如果
\textit{maxR}=\infty ,输出\texttt{Infinity} 。 - 否则输出
\textit{maxR}+s ,表示初始 rating 的最大值,加上n 场比赛的 rating 累计变化量,就是最终 rating 的最大值。
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)
}
}
- 时间复杂度:
\mathcal{O}(n) 。