1 条题解
-
0
📝 题目大意
给定一个形如
ABC+ 三位数字的字符串 (如ABC349),判断它是否为 AtCoder 上已结束的比赛的简称。有效范围是ABC001到ABC349,但ABC316因为未举办而被排除,本场比赛ABC350也尚未结束。💡 解题思路
-
题目分析:字符串长度固定为 ,前三位一定是
ABC,后三位是数字。由于数字部分固定为三位且带前导零(001,002, …),字符串的字典序比较等价于数值比较。例如"ABC010"和"ABC009"的字典序关系与数值关系一致,因为所有数字位数相同。 -
算法推导:
- 题目要求 在 范围内且 。
- 由于字符串比较天然支持字典序,直接判断
s >= "ABC001" && s <= "ABC349"即可覆盖所有有效编号。 - 再单独排除
"ABC316",注意s != "ABC316"必须放在与运算中,否则ABC316也满足范围判断。
-
边界与细节:
ABC000:不在范围内,应输出No。s >= "ABC001"已排除。ABC350及以上:s <= "ABC349"已排除。ABC316:单独用!=排除,注意它在[001, 349]范围内,不加排除会输出Yes导致 WA。- 前导零自动处理:字符串比较
"ABC005"正确大于"ABC001",无需转整数。
⏱️ 复杂度分析
- 时间复杂度:,仅一次字符串比较。
- 空间复杂度:,仅存储输入字符串。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin >> s; // 字符串字典序比较:由于数字部分固定 3 位且带前导零,等价于数值比较 // 有效范围:ABC001 ~ ABC349,但要排除 ABC316(该场比赛未举办) if(s >= "ABC001" && s <= "ABC349" && s != "ABC316"){ cout << "Yes"; } else { cout << "No"; } return 0; } -
- 1
信息
- ID
- 795
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者