[R26B]n+m
- 难度 入门
- 时限 1s
- 空限 512m
- 模拟
数据规模:,,, 仅由数字和
+构成。
思路
字符串 必须严格是「 位数字 + 一个 + + 位数字」的拼接,因此只需同时满足两个条件:
- 的第 个位置(从 开始计数)必须是
+,其余位置必须全是数字。由于允许前导 ,其余位置只要是0~9即可,无需额外限制。 - 的总长度恰好为 (前 位 + 一个
++ 后 位),保证+后面正好有 位数字。
第一个条件保证了 + 出现的位置唯一且正确,第二个条件则排除「多出数字」或「数字不足」的情况。两者合起来即对应题目所要求的唯一分割方式。
题目保证 仅由数字和 + 构成,这些都是 ASCII 字符(单字节),所以在仓颉里直接按字节(UInt8)遍历即可,无需区分字节与字符。
复杂度
每组数据时间 ,总计 ;空间 。
仓颉实现
import std.env.*
import std.convert.*
main(): Int64 {
let reader = getStdIn()
let t = Int64.parse(reader.readln().getOrThrow())
for (_ in 0..t) {
let line = reader.readln().getOrThrow().split(" ", removeEmpty: true)
let n = Int64.parse(line[0])
let m = Int64.parse(line[1])
let s = reader.readln().getOrThrow()
// s 仅含数字与 '+',均为 ASCII,故按字节遍历即可;字符数 == 字节数
var idx: Int64 = 0
var ok = true
for (c in s) {
let cb = Int64(c)
if (idx == n) {
if (cb != 43) { // '+'
ok = false
}
} else {
if (cb < 48 || cb > 57) { // '0'..'9'
ok = false
}
}
idx += 1
}
if (idx != n + m + 1) {
ok = false
}
if (ok) {
println("Yes")
} else {
println("No")
}
}
return 0
}