[语言月赛202305H] 制糊串

· · 题解

[语言月赛202305H] 制糊串 题解

Source & Knowledge

2023 年 5 月语言月赛,由洛谷网校入门计划/基础计划提供。

本题考查字符串处理。

文字题解

题目大意

给定两个字符串 s, t,有 q 次询问,每次给出 l_1, r_1, l_2, r_2,问 s[l_1, r_1]t[l_2, r_2] 的字典序大小关系。

解析

本题有两个关键点:

提取子串

stringsubstr(pos, len) 函数可以截取一个字符串的第 pos 个字符起长度为 len 的子串。注意这里 pos 的编号是从 0 开始的。例如,如果 s = \texttt{abc},则 s.substr(1,2) 的结果是 \texttt{bc}

子串 s[l_1, r_1] 的起始位置 pos = l_1 - 1,长度为 len = r_2 - l_1 + 1

于是,提取 s[l_1, r_1] 的语句为 x = s.substr(l1 - 1, r1 - l1 + 1)

类似地,提取 t[l_2, r_2] 的语句为 y = t.substr(l2 - 1, r2 - l2 + 1)

字典序比较

可以直接用字符串的小于运算比较两个字符串的大小关系。当 x 的字典序小于 y 的字典序时,返回值为真;否则返回假。

x < yx > y 均不成立时,自然说明两字符串大小相等。

if (x < y) {
  cout << "yifusuyi\n";
} else if (x > y) {
  cout << "erfusuer\n";
} else {
  cout << "ovo\n";
}

视频题解