B3690 [语言月赛202212] 盒武器 题解
B3690 [语言月赛202212] 盒武器 题解
Source & Knowledge
2022 年 12 月语言月赛,由洛谷网校入门计划/基础计划提供。
文字题解
题目大意
给定两个字符串
解析
提供两种做法。第一种比较容易想到,但是码量较大。第二种码量极短,但是可能有点难想到。
第一种做法如下:
我们注意到
由于题目保证了
考虑
现在我们需要下手的情况只有一个了,即「存在一个位置
不难发现,这种情况下,我们只需要修改
以下为此做法的核心代码:
scanf("%s%s", s, t);
lenS = strlen(s);
lenT = strlen(t);
int ptr = 0, minLength = min(lenS, lenT);
while (ptr < minLength) {
if (s[ptr] != t[ptr])
break;
++ptr;
}
if (ptr == minLength) {
for (int i = 'a'; i <= 'z'; ++i) {
printf("%c", i);
}
} else {
char a = t[ptr], b = s[ptr];
printf("%c%c", a, b);
for (int i = 'a'; i <= 'z'; ++i) {
if (i != a && i != b)
printf("%c", i);
}
}
第二种做法如下:
由第一种做法,我们知道,如果
我们考虑,如果我们将整个字母表的大小关系反转,即
所以这一种做法的代码量少得可怕,核心代码如下:
string s, t;
cin >> s >> t;
if (s > t) cout << "abcdefghijklmnopqrstuvwxyz" << endl;
else cout << "zyxwvutsrqponmlkjihgfedcba" << endl;
视频题解
完整代码请在视频中查看。