[R69B] osu!
- 难度 入门
- 时限 1s
- 空限 512m
- 模拟
数据规模:,字符串仅由
P、G、M构成。
思路
按顺序模拟每个判定:P 得 分、G 得 分,二者都使连击数加 1;M 不得分且连击数归零。边处理边更新最大连击数。
复杂度:时间 ,空间 。
仓颉实现
import std.env.*
import std.convert.*
main(): Int64 {
let reader = getStdIn()
let n = Int64.parse(reader.readln().getOrThrow())
let s = reader.readln().getOrThrow()
var score: Int64 = 0
var combo: Int64 = 0
var mx: Int64 = 0
for (i in 0..n) {
let c = s[i]
if (c == UInt8(0x50)) {
score = score + 300 + combo
combo = combo + 1
} else if (c == UInt8(0x47)) {
score = score + 100 + combo
combo = combo + 1
} else {
combo = 0
}
if (combo > mx) {
mx = combo
}
}
let out = StringBuilder()
out.append(score)
out.append(" ")
out.append(mx)
println(out.toString())
return 0
}
要点:
P(0x50)和G(0x47)走加分分支并累加连击,其余(M)直接归零连击。- 总分约 ,用
Int64累加。