题目简述
有 �N 个站点按顺序排在一条直线上,第 �(1≤�≤�)i(1≤i≤N) 个站点是 ��Si。
有一辆火车会在其中的 �(�≤�)M(M≤N) 个站点停下,第 �(1≤�≤�)j(1≤j≤M) 个停下来的站点的名字是 ��Tj。
保证 �1=�1,��=��T1=S1,TM=SN。
对于 �N 个站点中的每一个,请判断火车是否在该站点停下。
数据范围
2≤�≤�≤1052≤M≤N≤105
�,�N,M 为整数
��(1≤�≤�)Si(1≤i≤N)是一个长度在 [1,10][1,10] 之间的小写英文字符串。
��≠��(�≠�)Si=Sj(i=j)
�1=�1,��=��T1=S1,TM=SN
(�1,…,��)(T1,…,TM) 是通过移除 (�1,…,��)(S1,…,SN) 中的若干个站点且不改变原有顺序得到的。
输入格式
第一行包含整数 �,�N,M。
第二行包含 �N 个字符串 �1,�2,…,��S1,S2,…,SN。
第三行包含 �M 个字符串 �1,�2,…,��T1,T2,…,TM。
输出格式
输出 �N 行。如果第 �(1≤�≤�)i(1≤i≤N) 个站点在火车的经停站点列表中,输出 Yes
,否则输出 No
。
Translated by @tianbiandeshenghuo11
输入输出样例
输入 #1复制
5 3 tokyo kanda akiba okachi ueno tokyo akiba ueno
输出 #1复制
Yes No Yes No Yes
输入 #2复制
7 7 a t c o d e r a t c o d e r
输出 #2复制
Yes Yes Yes Yes Yes Yes Yes
说明/提示
制約
- 2 ≤ � ≤ � ≤ 1052 ≤ M ≤ N ≤ 105
- �, �N, M は整数
- �� (1 ≤ � ≤ �)Si (1 ≤ i ≤ N) は英小文字のみからなる 11 文字以上 1010 文字以下の文字列
- �� ≠ �� (� ≠ �)Si = Sj (i = j)
- �1 = �1T1 = S1 かつ �� = ��TM = SN
- (�1, …, ��)(T1, …, TM) は (�1, …, ��)(S1, …, SN) から 00 個以上の文字列を選んで取り除き、残った文字列を元の順序で並べることで得られる
Sample Explanation 2
急行列車が全ての駅に止まることもあります。
#include<bits/stdc++.h>
using namespace std;
struct type{
string a,b;
}p[100][100];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>p[0][i].a;
}
for(int j=0;j<m;j++){
cin>>p[1][j].b;
}
for(int i=0;i<n;i++){
int flag=0;
for(int j=0;j<m;j++){
if(p[0][i].a.find(p[1][j].b)!=-1){
flag=1;
break;
}
}
if(flag)cout<<"Yes"<<"\n";
else cout<<"No"<<"\n";
}
return 0;
}
上面那个会RE
下面这个会UNKNOW ERROR
#include<bits/stdc++.h>
using namespace std;
struct type{
string a,b;
}p[100][100];
int mp[100];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>p[0][i].a;
//mp[i]=i;
}
for(int j=0;j<m;j++){
cin>>p[1][j].b;
for(int i=0;i<n;i++){
if(p[0][i].a.find(p[1][j].b)!=-1){
mp[i]=1;
break;
}
}
}
for(int i=0;i<n;i++){
int flag=0;
if(mp[i]==1){
cout<<"Yes"<<"\n";
}
else cout<<"No"<<"\n";
//for(int j=0;j<m;j++){
//if(p[0][i].a.find(p[1][j].b)!=-1){
// flag=1;
// break;
//}
//}
//if(flag)cout<<"Yes"<<"\n";
//else cout<<"No"<<"\n";
}
return 0;
}
主要是想看看有没有简单一点的map题给我练练手