首页 > 试题广场 >

攻击识别

[编程题]攻击识别
  • 热度指数:220 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

小明的服务器遭到了黑客的攻击,他想了一个简易的办法来判断服务器收到的数据包是否是来自黑客的攻击。

 

小明假设黑客的攻击都是往一些模式串里插入一个片段伪装出来的,例如模式串M为AN--ATTACK,那么黑客可能往M里插入一段信息,如在AN-后插入hello,来得到伪装后的数据包,AN-hello-ATTACK。小明想出了一系列的模式串Mi,你能否帮助小明判断服务器收到的数据包是否可能由某个模式串伪装而成。

 

示例,给定两个模式串M1=abc,M2=abd,那么数据包abec可能是攻击(模式M1),但数据包xyz则不属于M1、M2里面任何一个类型的攻击。

 

 



输入描述:
输入的第一行一个正整数n(1 ≤ n ≤ 100000),表示n种攻击模式。

接下来n行,其中第i行一个字符串Mi(1 ≤ strlen(Mi) ≤ 50),表示第i种攻击模式。

在接下来一个正整数k,表示有k(1 ≤ k ≤ 100)个数据包。

接下来k行,其中第i行一个字符串Di(1 ≤ strlen(Di) ≤ 1000),表示第i个数据包。

有50%的输入数据满足:1 ≤ n ≤ 10


输出描述:
输入k行,每行输出“YES”或者“NO”(全部大写)。

其中第i行表示第i个数据包有没有可能是攻击。
示例1

输入

3
abc
abd
xyz
6
abacac
affffbd
xxxxxxyyyyz
aaabbbbcccc
ifqwefxxf
xayaz

输出

YES
YES
YES
NO
NO
NO
头像 YeaLuo
发表于 2024-06-11 15:15:40
题目的关键是判断输入的串是否是模式串仅插入一次得到的,所以在从前往后遍历发现不匹配时再从后向前遍历查找有没有发现第二次不匹配(也就是第二次插入片段)。如果发现第二次不匹配,那么不满足题目要求,不是攻击包,如果只有一次不匹配,那么就是攻击包。 #include <bits/stdc++.h> 展开全文