「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 1≤T≤100,每个字符串长度不超过 10 10 10。
方法1
解题思路:
根据题目要求,我们需要判断给定的四个字符串 ( 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。
如果同时满足这三个条件,则该四元组是"浴眼盯真"的,否则不是。
我们可以依次判断每个条件是否成立,如果有任意一个条件不满足,就可以直接输出 “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;
}
代码解释:
-
定义了一个函数
isYuYanDingZhen
,用于判断给定的四个字符串是否满足"浴眼盯真"的条件。函数接受四个字符串a
,b
,c
,d
作为参数,返回一个布尔值表示是否满足条件。 -
在函数内部,依次判断每个条件是否成立:
- 判断
a
和b
的首字母是否为'y'
,如果不是,直接返回false
。 - 判断
c
是否等于"ding"
,如果不等于,直接返回false
。 - 判断
d
是否等于"zhen"
,如果不等于,直接返回false
。
- 判断
-
如果所有条件都满足,函数返回
true
,表示该四元组是"浴眼盯真"的。 -
在
main
函数中,首先读取测试数据组数T
。 -
使用
while
循环遍历每组测试数据,循环次数为T
。 -
在每次循环中,读取四个字符串
a
,b
,c
,d
。 -
调用
isYuYanDingZhen
函数判断当前四元组是否满足条件,如果满足则输出 “Yes”,否则输出 “No”。 -
循环结束后,程序结束。
复杂度分析:
- 时间复杂度: 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;
}
代码解释:
-
在
isYuYanDingZhen
函数中,我们将所有条件放在一个判断语句中进行判断。 -
使用
&&
运算符将所有条件连接起来,只有当所有条件都满足时,整个判断语句的结果才为true
。 -
判断条件包括:
a[0] == 'y'
:判断a
的首字母是否为'y'
。b[0] == 'y'
:判断b
的首字母是否为'y'
。c == "ding"
:判断c
是否等于"ding"
。d == "zhen"
:判断d
是否等于"zhen"
。
-
如果所有条件都满足,函数返回
true
,表示该四元组是"浴眼盯真"的;否则返回false
。 -
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)。我们只使用了常数级别的额外空间来存储字符串和变量。
这种方法将所有条件放在一个判断语句中进行判断,代码更加简洁明了。但是,如果条件很多或者条件比较复杂,可能会影响代码的可读性。在实际应用中,可以根据具体情况选择适合的方法。