2 条题解

  • 0
    @ 2026-6-19 23:31:02

    虽说这道题看起来有点复杂,但也可以用史山过,先定一个字符串,再用n或许它的长度,进行一次特判。因为如果长度是一的话,for循环后面不会运行。之后在每个字符串判定。

    #include<iostream>
    #include<string>
    using namespace std;
    int main(){
        int n;
        string s;
        cin>>s;
        n=s.size();
        if(n==1){
        	cout<<"Yes";
        	return 0;
    	}
        for(int i=0;i<=n-2;i++){
        	if(s[i]<=s[i+1]){
        		cout<<"No";
        		return 0;
    		}
    	}
    	cout<<"Yes";
        return 0;
    }
    
    • 0
      @ 2026-6-19 10:30:40

      📝 题目大意

      给定一个正整数 NN1N999991 \le N \le 99999),判断它是否为"321-like Number"——即从高位到低位,每一位数字严格单调递减。一位数总是满足条件。

      💡 解题思路

      1. 题目分析NN 最大只有 9999999999(5 位),直接逐位检查即可,无需任何优化。约束中的小范围暗示了 O(d)O(d) 的朴素算法完全足够。
      2. 算法推导
        • NN 以字符串 s 读入,方便逐位访问。
        • 初始化标志 is_valid = true
        • 从第 2 位(i = 1)开始遍历到末尾,若 s[i] >= s[i - 1](当前位不小于前一位),说明不满足严格递减,标记 is_valid = false 并退出循环。
        • 最后根据 is_valid 输出 "Yes""No"
      3. 边界与细节
        • 一位数s.size() == 1 时循环体不执行,is_valid 保持 true,正确输出 "Yes"
        • 字符比较:直接用 s[i] >= s[i - 1] 比较字符是安全的,因为数字字符 '0'~'9' 的 ASCII 码顺序与数值大小一致。
        • WA 陷阱:注意条件是严格递减,必须用 >= 判断非法(相等也不允许),若误写为 > 则会在相邻相等时误判为合法。

      ⏱️ 复杂度分析

      • 时间复杂度O(d)O(d),其中 ddNN 的位数,最坏 d=5d = 5
      • 空间复杂度O(1)O(1),仅存储一个字符串(最多 5 个字符)。

      💻 标准代码 (C++)

      #include <iostream>
      #include <string>
      using namespace std;
      int main() {
          string s;
          cin >> s;                          // 以字符串读入,方便逐位比较
          bool is_valid = true;              // 标记是否满足 321-like
          for (int i = 1; i < s.size(); ++i) {
              if (s[i] >= s[i - 1]) {        // 当前位不小于前一位,违反严格递减
                  is_valid = false;
                  break;                     // 一旦发现不满足,直接退出
              }
          }
          if (is_valid) {
              cout << "Yes" << endl;
          } else {
              cout << "No" << endl;
          }
          return 0;
      }
      
      • 1

      信息

      ID
      745
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      (无)
      递交数
      2
      已通过
      2
      上传者