1 条题解

  • 0
    @ 2025-8-24 21:15:11

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Maxmilite
    **

    搬运于2025-08-24 21:15:10,当前版本为作者最后更新于2023-07-16 21:00:56,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Source & Knowledge

    2023 年 7 月语言月赛,由洛谷网校入门计划/基础计划提供。

    题目大意

    给定一个表达式 X Y Z W,其中 X,ZX,Z 为单个大小写字母或一位数字,Y,WY, W 为整数。判断该表达式是否合法及计算循环次数。

    题目分析

    在读入表达式后,只需按照题目给定的条件运算即可。

    char x, z;
    long long y, w;
    cin >> x >> y >> z >> w;
    
    1. 表达式的合法性

      • XXZZ 均为小写字母:核心代码为 if (x >= 'a' && x <= 'z')。(对 ZZ 的判断由下方的「XXZZ 相同」进行)
      • XXZZ 相同:核心代码为 if (x == z)
      • YYWW 均为整数。由于题目保证这一条总是成立,因此不需要特殊判断。

      故此处核心代码如下:

      if (x == z && (x >= 'a' && x <= 'z')) {
          cout << "valid" << endl;
          ...
      else {
          cout << "Invalid" << endl << -1 << endl;
      }
      
    2. 如果合法,表达式将枚举的次数

      对于一个合法的枚举表达式,如果 YWY \le W,其将会枚举 WY+1W - Y + 1 次;否则,其将会枚举 YW+1Y - W + 1 次。

      只需要判断 YYWW 的大小关系,并输出对应变量即可。故此处核心代码如下:

      if (x == z && (x >= 'a' && x <= 'z')) {
          cout << "valid" << endl;
          if (y <= w) {
          	cout << w - y + 1 << endl;
          } else {
          	cout << y - w + 1 << endl;
          }
      ...
      

    视频讲解

    • 1

    信息

    ID
    8908
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者