语言月赛 202412【正在联系教练退赛】题解(AC)
》》》点我查看「视频」详解》》》
[语言月赛 202412] 正在联系教练退赛
题目背景
在本题中,我们称一个字符串 y y y 是一个字符串 x x x 的子串,当且仅当从 x x x 的开头和结尾删去若干个(可以为 0 0 0 个)字符后剩余的字符串和 y y y 相同。
题目描述
在 XCPC 竞赛里,共有 n n n 只猪猪队伍。每只猪猪队伍都有一个队伍名称。第 i i i 只队伍的名称是 s i s_i si。
但是,队伍名称不能乱起。主办方会审查每支队伍的名称。如果一支队伍的队名被认为违规,主办方就会联系该队伍的教练员,为该队伍办理退赛。
具体而言,主办方有一个字典,字典里共有 m m m 个字符串,第 j j j 个字符串是 t j t_j tj。
如果一支队伍的队伍名 s i s_i si 存在一个子串 k k k,使得 k k k 在主办方的字典里,则这支队伍的队伍名被认为是违规。
你作为主办方,想知道有哪些队伍会被联系教练退赛。
输入格式
第一行是一个整数
n
n
n,表示队伍数量。
接下来
n
n
n 行,每行一个字符串,表示一支队伍的名称
s
i
s_i
si。
接下来是一个整数
m
m
m,表示字典大小。
接下来
m
m
m 行,每行一个字符串,表示字典里一个字符串
t
j
t_j
tj。
输出格式
输出 n n n 行,每行一个字符串。如果第 i i i 支队伍会被联系教练退赛,在第 i i i 行输出 Yes \texttt{Yes} Yes,否则在第 i i i 行输出 No \texttt{No} No。
样例 #1
样例输入 #1
3
yifusuyi
erFusuer
yiFusuYi
2
fusu
er
样例输出 #1
Yes
Yes
No
提示
样例 1 解释
因为第一个队名包含子串
fusu
\texttt{fusu}
fusu,因此这支队伍会被退赛。
因为第二个队名包含子串
er
\texttt{er}
er,因此这支队伍会被退赛。
数据规模与约定
我们用 ∣ s i ∣ |s_i| ∣si∣ 和 ∣ t j ∣ |t_j| ∣tj∣ 表示 s i s_i si 和 t j t_j tj 的长度。
测试点编号 | n n n | m m m | 特殊约定 |
---|---|---|---|
1 1 1 | = 1 =1 =1 | = 1 =1 =1 | ∣ s i ∣ = ∣ t j ∣ = 1 \mid s_i\mid =\mid t_j\mid =1 ∣si∣=∣tj∣=1 |
2 2 2 | = 1 =1 =1 | = 1 =1 =1 | 无 |
3 3 3 | = 1 =1 =1 | ≤ 100 \leq 100 ≤100 | 无 |
4 4 4 | ≤ 100 \leq 100 ≤100 | = 1 =1 =1 | 无 |
5 , 6 5,6 5,6 | ≤ 100 \leq 100 ≤100 | ≤ 100 \leq 100 ≤100 | ∣ s i ∣ = ∣ t j ∣ = 1 \mid s_i \mid=\mid t_j\mid = 1 ∣si∣=∣tj∣=1 |
7 , 8 7,8 7,8 | ≤ 100 \leq 100 ≤100 | ≤ 100 \leq 100 ≤100 | ∣ t i ∣ = 1 \mid t_i \mid = 1 ∣ti∣=1 |
9 , 10 9,10 9,10 | ≤ 100 \leq 100 ≤100 | ≤ 100 \leq 100 ≤100 | 无 |
对全部的测试数据, 1 ≤ n , m ≤ 100 1 \leq n,m \leq 100 1≤n,m≤100, 1 ≤ ∣ s i ∣ , ∣ t j ∣ ≤ 100 1 \leq |s_i|, |t_j| \leq 100 1≤∣si∣,∣tj∣≤100,输入的字符串均仅含可见 ASCII 字符,其 ASCII 范围为 33 ∼ 126 33 \sim 126 33∼126(含两端,空格的 ASCII 为 32 32 32)。
AC_Code
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 1e2 + 10;
int n, m;
string s[N], str[N];
int main()
{
cin >> n;
for (int i = 1; i <= n; ++ i )
cin >> s[i];
cin >> m;
for (int i = 1; i <= m; ++ i )
cin >> str[i];
for (int i = 1; i <= n; ++ i )
{
bool flag = false;
for (int j = 1; j <= m; ++ j )
if (s[i].find(str[j]) != string::npos)
{
flag = true;
break;
}
if (flag)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}
》》》点我查看「视频」详解》》》