CF1281B Azamon Web Services
题目描述
你的朋友 Jeff Zebos 正在尝试经营他的新在线公司,但进展并不顺利。他的网站 Azamon 的销量并不高。你认为,他的最大问题是搜索引擎排名不够靠前。如果他能将产品名称改得比竞争对手更好,那么他就能在搜索结果中排名第一,成为百万富翁。
经过一番研究,你发现搜索引擎只按字典序排序结果。如果你的朋友能将产品名称改成比竞争对手名称字典序更小的字符串,他就能排名第一!
为了让你的策略不那么容易被竞争对手察觉,你决定最多只交换产品名称中的两个字母。
请帮助 Jeff 找到比竞争对手名称字典序更小的产品新名称(通过最多交换一对字符)。
给定字符串 $s$ 表示 Jeff 的产品名称,字符串 $c$ 表示竞争对手的产品名称。请你判断是否可以通过至多交换 $s$ 中一对不同位置的字符(即找到两个不同的下标 $i$ 和 $j$,交换 $s_i$ 和 $s_j$),使得新名称严格字典序小于 $c$。如果可以,输出任意一个满足条件的新名称;否则,输出 "---"。
注意:字符串 $a$ 严格字典序小于字符串 $b$ 当且仅当满足以下之一:
- $a$ 是 $b$ 的真前缀,即 $a$ 是 $b$ 的前缀且 $a \neq b$;
- 存在整数 $1 \le i \le \min{(|a|, |b|)}$,使得 $a_i < b_i$ 且对于所有 $1 \le j < i$ 有 $a_j = b_j$。
输入格式
输入的第一行包含一个整数 $t$($1 \le t \le 1500$),表示测试用例的数量。接下来的每一行描述一个测试用例。
每个测试用例包含一行,包含两个用空格分隔的字符串 $s$ 和 $c$($2 \le |s| \le 5000, 1 \le |c| \le 5000$)。字符串 $s$ 和 $c$ 仅包含大写英文字母。
保证所有测试用例中 $|s|$ 的总和不超过 $5000$,所有 $|c|$ 的总和不超过 $5000$。
输出格式
对于每个测试用例,输出一行,内容为:
- 通过最多交换一对字符得到的新名称,且该名称严格字典序小于 $c$。如果有多个满足条件的答案,可以输出任意一个;
- 如果无法满足条件,输出三个短横线 "---"(不带引号)。
说明/提示
在第一个测试用例中,可以交换字符串的第二个和第四个字母,得到的新字符串 "AMAZON" 字典序小于 "APPLE"。
在第二个测试用例中,无法改进产品名称以满足所有条件。
在第三个测试用例中,可以不交换任何字符,名称 "APPLE" 字典序小于 "BANANA"。注意,也有其他合法答案,例如 "APPEL"。
由 ChatGPT 4.1 翻译