P9459 「EZEC-14」浴眼盯真

「EZEC-14」浴眼盯真

题目背景

验题人提示:本题数据在 windows 下生成,即换行符为 \r\n

题目描述

dXqwq 定义一个字符串四元组 ( a , b , c , d ) (a,b,c,d) (a,b,c,d) 是“浴眼盯真”的,当且仅当:

  • a , b a,b a,b 的首字母均为 y \texttt{y} y
  • c c c 恰好等于 ding \texttt{ding} ding
  • d d d 恰好等于 zhen \texttt{zhen} zhen

给定四个用空格分隔的字符串 a , b , c , d a,b,c,d a,b,c,d,保证其只包含小写英文字母,你需要判断 ( a , b , c , d ) (a,b,c,d) (a,b,c,d) 是否是“浴眼盯真”的。

输入格式

本题有多组测试数据。

第一行输入一个整数 T T T,代表测试数据组数。

接下来 T T T 行,每行输入四个用空格分隔的字符串 a , b , c , d a,b,c,d a,b,c,d

输出格式

对于每组数据输出一行。

如果 ( a , b , c , d ) (a,b,c,d) (a,b,c,d) 是“浴眼盯真”的,输出 Yes,否则输出 No

样例 #1

样例输入 #1

5
yi yan ding zhen
yu yan ding zhen
zheng tai ding zhen
yin yang guai qi
you xiu su zhi

样例输出 #1

Yes
Yes
No
No
No

提示

【样例解释】

前两组测试数据满足全部要求。

第三,五组测试数据不满足第一条要求。

第四,五组测试数据不满足第二,三条要求。

【数据范围】

本题采用捆绑测试。

  • Subtask 1(50 pts):保证输入的所有字符串长度均为 4 4 4
  • Subtask 2(50 pts):无特殊限制。

对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 100 1\leq T\leq 100 1T100,每个字符串长度不超过 10 10 10

方法1
解题思路:

根据题目要求,我们需要判断给定的四个字符串 ( a , b , c , d ) (a,b,c,d) (a,b,c,d) 是否满足以下条件:

  1. a , b a,b a,b 的首字母均为 y \texttt{y} y
  2. c c c 恰好等于 ding \texttt{ding} ding
  3. d d d 恰好等于 zhen \texttt{zhen} zhen

如果同时满足这三个条件,则该四元组是"浴眼盯真"的,否则不是。

我们可以依次判断每个条件是否成立,如果有任意一个条件不满足,就可以直接输出 “No”。只有当所有条件都满足时,才输出 “Yes”。

C++代码实现:

#include <iostream>
#include <string>
using namespace std;

bool isYuYanDingZhen(string a, string b, string c, string d) {
    // 判断a,b的首字母是否为'y'
    if (a[0] != 'y' || b[0] != 'y') {
        return false;
    }
    
    // 判断c是否等于"ding"
    if (c != "ding") {
        return false;
    }
    
    // 判断d是否等于"zhen"
    if (d != "zhen") {
        return false;
    }
    
    return true;
}

int main() {
    int T;
    cin >> T;
    
    while (T--) {
        string a, b, c, d;
        cin >> a >> b >> c >> d;
        
        if (isYuYanDingZhen(a, b, c, d)) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }
    
    return 0;
}

代码解释:

  1. 定义了一个函数 isYuYanDingZhen,用于判断给定的四个字符串是否满足"浴眼盯真"的条件。函数接受四个字符串 a,b,c,d 作为参数,返回一个布尔值表示是否满足条件。

  2. 在函数内部,依次判断每个条件是否成立:

    • 判断 ab 的首字母是否为 'y',如果不是,直接返回 false
    • 判断 c 是否等于 "ding",如果不等于,直接返回 false
    • 判断 d 是否等于 "zhen",如果不等于,直接返回 false
  3. 如果所有条件都满足,函数返回 true,表示该四元组是"浴眼盯真"的。

  4. main 函数中,首先读取测试数据组数 T

  5. 使用 while 循环遍历每组测试数据,循环次数为 T

  6. 在每次循环中,读取四个字符串 a,b,c,d

  7. 调用 isYuYanDingZhen 函数判断当前四元组是否满足条件,如果满足则输出 “Yes”,否则输出 “No”。

  8. 循环结束后,程序结束。

复杂度分析:

  • 时间复杂度: O ( T ) O(T) O(T),其中 T T T 是测试数据组数。对于每组测试数据,判断条件的时间复杂度为 O ( 1 ) O(1) O(1),因此总时间复杂度为 O ( T ) O(T) O(T)
  • 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数级别的额外空间来存储字符串和变量。

该解决方案的核心是依次判断每个条件是否成立,只有当所有条件都满足时才认为是"浴眼盯真"的。这种逐个判断条件的思路适用于类似的题目,可以避免不必要的计算。

方法2

C++代码实现:

#include <iostream>
#include <string>
using namespace std;

bool isYuYanDingZhen(string a, string b, string c, string d) {
    return (a[0] == 'y' && b[0] == 'y' && c == "ding" && d == "zhen");
}

int main() {
    int T;
    cin >> T;
    
    while (T--) {
        string a, b, c, d;
        cin >> a >> b >> c >> d;
        
        if (isYuYanDingZhen(a, b, c, d)) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }
    
    return 0;
}

代码解释:

  1. isYuYanDingZhen 函数中,我们将所有条件放在一个判断语句中进行判断。

  2. 使用 && 运算符将所有条件连接起来,只有当所有条件都满足时,整个判断语句的结果才为 true

  3. 判断条件包括:

    • a[0] == 'y':判断 a 的首字母是否为 'y'
    • b[0] == 'y':判断 b 的首字母是否为 'y'
    • c == "ding":判断 c 是否等于 "ding"
    • d == "zhen":判断 d 是否等于 "zhen"
  4. 如果所有条件都满足,函数返回 true,表示该四元组是"浴眼盯真"的;否则返回 false

  5. main 函数的逻辑与方法一相同,读取测试数据组数 T,然后使用 while 循环遍历每组测试数据,调用 isYuYanDingZhen 函数判断当前四元组是否满足条件,并输出相应的结果。

复杂度分析:

  • 时间复杂度: O ( T ) O(T) O(T),其中 T T T 是测试数据组数。对于每组测试数据,判断条件的时间复杂度为 O ( 1 ) O(1) O(1),因此总时间复杂度为 O ( T ) O(T) O(T)
  • 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数级别的额外空间来存储字符串和变量。

这种方法将所有条件放在一个判断语句中进行判断,代码更加简洁明了。但是,如果条件很多或者条件比较复杂,可能会影响代码的可读性。在实际应用中,可以根据具体情况选择适合的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天秀信奥编程培训

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值