题解:洛谷 AT_abc451_a illegal

【题目来源】

洛谷:AT_abc451_a [ABC451A] illegal - 洛谷

【题目描述】

在 AtCoder 国,Takahashi 所居住的国家,有一条奇怪的法律:“你不能写下长度为 \(5\) 的倍数的字符串。”

Takahashi 写下了一个字符串 \(S\)。请判断他是否违反了这条法律。

【输入】

输入按如下格式从标准输入读取:

\(S\)

【输出】

如果 Takahashi 违反了该法律,输出 Yes;否则输出 No

【输入样例】

legal

【输出样例】

Yes

【核心思想】

  1. 问题分析:给定字符串 \(S\),判断其长度是否为 \(5\) 的倍数。若是则违反法律,输出 Yes;否则输出 No。这是一个字符串长度判定问题,核心在于获取字符串长度并进行模运算。

  2. 算法选择

    • 直接判定:计算字符串长度 \(|S|\),判断 \(|S| \bmod 5 = 0\) 是否成立
  3. 关键步骤

    • 读入数据:字符串 \(S\)
    • 长度判定:若 \(S.\text{size()} \bmod 5 = 0\),输出 Yes;否则输出 No
  4. 时间/空间复杂度

    • 时间复杂度:\(O(|S|)\),读取字符串
    • 空间复杂度:\(O(|S|)\),存储字符串
  5. 模运算判定的核心思想

    • 倍数判定:一个数是 \(5\) 的倍数 \(\Leftrightarrow\) 该数对 \(5\) 取模等于 \(0\)。利用 % 5 == 0 简洁判定
    • 字符串长度获取:C++ 中 string::size() 返回字符串长度,时间 \(O(1)\)
    • 边界情况:空字符串长度为 \(0\)\(0 \bmod 5 = 0\),应输出 Yes(若允许空字符串)
    • 适用于基础字符串操作、模运算判定类入门问题

【算法标签】

入门 #字符串入门

【代码详解】

#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
posted @ 2026-08-26 10:11  团爸讲算法  阅读(3)  评论(0)    收藏  举报