1.练习项目 :
题目描述
给定 N 个字符串 S1,S2,...,SN 和 M 个询问,每个询问包含一个字符串 Ti,问 Ti 是否在 S1 或 S2 ... 或 SN 的前缀出现过。
输入描述
输入第一行包含两个整数 N,M ,分别表示给定字符串的数量和询问的个数。
第 2∼N+1 行每行包含一个字符串 Si。
接下来 M 行每行包含一个字符串 Ti。
1≤N,M≤105。2≤∣S1+...+SN+T1+...+TM)∣≤2×106。
保证 Si,Ti 只包含小写字母。
输出描述
输出共 M 行,每行包含一个整数,表示对应询问的回答。
若存在则输出 Y,否则输出 N。
2.选择课程
在蓝桥云课中选择题库,选择题号1204并开始练习。
3.开始练习
(1)源码 :
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=2e6+10;
int nex[N][26];
int cnt[N];
int idx=2;
void insert(char s[])
{
int x=1;
for(int i=0;s[i];i++){
if(!nex[x][s[i]-'a'])nex[x][s[i]-'a']=idx++;
x=nex[x][s[i]-'a'];
}
}
bool check(char s[])
{
int x=1;
for(int i=0;s[i];i++)x=nex[x][s[i]-'a'];
return x;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++){
char s[N];cin>>s;
insert(s);
}
for(int i=1;i<=m;i++){
char s[N];cin>>s;
cout<<(check(s)?"Y":"N")<<'\n';
}
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。
(3)练习心得:注意每段代码末尾的分号是否存在,如不存在则需即使补充;输入法 是否切换 为英语模式;语法是否错误。