题目背景
在这个问题中,我们用s[x,y] 表示从字符串 s 的第 x 个字符到第 y 个字符连起来构成的字符串。例如,若abcdef,则 [2,4]=bcds[2,4]=bcd。
题目描述
给出两个字符串 s 和 t,有 q 次询问。
每次给出 l1,r1 和 l2,r2,请判断 s[l1,r1] 和 t[l2,r2] 谁的字典序更小。
输入格式
第一行是一个字符串 s。
第二行是一个字符串 t。
第三行是一个整数,表示询问次数 q。
接下来 q 行,每行四个整数 l1,r1,l2,r2,表示一次询问。
输出格式
对每次询问,输出一行一个字符串:
- 如果 s[l1,r1] 的字典序更小,请输出 yifusuyiyifusuyi。
- 如果 t[l2,r2] 的字典序更小,请输出 erfusuererfusuer。
- 如果两者的字典序一样大,请输出 ovoovo。
输入输出样例
输入 #1复制
Yifusuyi yifusuYi 3 1 2 7 8 1 2 1 2 7 8 7 8
输出 #1复制
ovo yifusuyi erfusuer
说明/提示
数据规模与约定
以下用 ∣s∣ 表示 s 的长度,∣t∣ 表示 t 的长度。
- 对 30%30% 的数据,∣s∣=∣t∣=1。
- 对 60%60% 的数据,q=1。
- 对 100%100% 的数据,1≤∣s∣,∣t∣,q≤103,1≤l1≤r1≤∣s∣,∣1≤l2≤r2≤∣t∣。输入字符串仅含大小写英文字母。
#include<bits/stdc++.h> using namespace std; void solve(string s1, string s2) { int n; cin >> n; for (int i = 0; i < n; i++) { int l1, r1, l2, r2; cin >> l1 >> r1 >> l2 >> r2; int len1 = r1 - l1 + 1, len2 = r2 - l2 + 1; string x = s1.substr(l1 - 1, len1), y = s2.substr(l2 - 1, len2); if (x < y) { cout << "yifusuyi" << "\n"; } else if (x > y) { cout << "erfusuer" << "\n"; } else { cout << "ovo" << "\n"; } } } int main() { string s1, s2; cin >> s1 >> s2; solve(s1, s2); return 0; }