题解:洛谷 AT_abc451_a illegal
【题目来源】
洛谷:AT_abc451_a [ABC451A] illegal - 洛谷
【题目描述】
在 AtCoder 国,Takahashi 所居住的国家,有一条奇怪的法律:“你不能写下长度为 \(5\) 的倍数的字符串。”
Takahashi 写下了一个字符串 \(S\)。请判断他是否违反了这条法律。
【输入】
输入按如下格式从标准输入读取:
\(S\)
【输出】
如果 Takahashi 违反了该法律,输出 Yes;否则输出 No。
【输入样例】
legal
【输出样例】
Yes
【核心思想】
-
问题分析:给定字符串 \(S\),判断其长度是否为 \(5\) 的倍数。若是则违反法律,输出
Yes;否则输出No。这是一个字符串长度判定问题,核心在于获取字符串长度并进行模运算。 -
算法选择:
- 直接判定:计算字符串长度 \(|S|\),判断 \(|S| \bmod 5 = 0\) 是否成立
-
关键步骤:
- 读入数据:字符串 \(S\)
- 长度判定:若 \(S.\text{size()} \bmod 5 = 0\),输出
Yes;否则输出No
-
时间/空间复杂度:
- 时间复杂度:\(O(|S|)\),读取字符串
- 空间复杂度:\(O(|S|)\),存储字符串
-
模运算判定的核心思想:
- 倍数判定:一个数是 \(5\) 的倍数 \(\Leftrightarrow\) 该数对 \(5\) 取模等于 \(0\)。利用
% 5 == 0简洁判定 - 字符串长度获取:C++ 中
string::size()返回字符串长度,时间 \(O(1)\) - 边界情况:空字符串长度为 \(0\),\(0 \bmod 5 = 0\),应输出
Yes(若允许空字符串) - 适用于基础字符串操作、模运算判定类入门问题
- 倍数判定:一个数是 \(5\) 的倍数 \(\Leftrightarrow\) 该数对 \(5\) 取模等于 \(0\)。利用
【算法标签】
入门 #字符串入门
【代码详解】
#include <bits/stdc++.h>
using namespace std;
string s; // 输入字符串
int main()
{
cin >> s; // 输入字符串
if (s.size() % 5 == 0) // 判断字符串长度是否能被5整除
{
cout << "Yes" << endl; // 能整除,输出Yes
}
else
{
cout << "No" << endl; // 不能整除,输出No
}
return 0;
}
【运行结果】
legal
Yes
浙公网安备 33010602011771号