[R51A] Forcecodes


数据规模:1n1051 \le n \le 10^50x,ai40390 \le x, a_i \le 4039

思路

按题意直接模拟即可。设当前 rating 为 rr,初始 r=xr = x。对每场比赛的表现分 aia_i,依次执行更新

rr+ai2r \leftarrow \left\lfloor \frac{r + a_i}{2} \right\rfloor

打完 nn 场后的 rr 即为答案。

由于 rraia_i 始终非负,整数除法 / 对应的就是向下取整,无需额外处理。

复杂度:时间 O(n)O(n),空间 O(n)O(n)(用于存 aa 数组)。

仓颉实现

import std.console.*
import std.convert.*

main(): Int64 {
    let reader = Console.stdIn
    let first = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
    let n = first[0]
    var x = first[1]
    let a = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
    for (i in 0..n) {
        x = (x + a[i]) / 2
    }
    println("${x}")
    return 0
}

要点:

  • 第一行的 nnxx 一次性读入,第二行的 aa 数组按行 .map 读入,行尾多余空格由 split(" ", removeEmpty: true) 过滤。
  • rraia_i 始终非负,/ 即为向下取整,无需对奇偶做特判。