CF1278A.Shuffle Hashing

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Shuffle Hashing

题目描述

Polycrap正在建立他自己的网页服务。作为一个很现代的网站其包含登入的功能。当然,这总会涉及到密码的安全问题。

Polycarp决定要储存密码的哈希值。密码的哈希值由以下这个算法来生成:

1.把只包含小写拉丁字母的密码pp进行随机打乱,记为pp'pp'可能和pp相等);

2.生成两个随机的只包含小写拉丁字母的字符串s1s_1s2s_2(这两个串中的任何一个可能为空串);

3.哈希算法的结果h=s1+p+s2h=s_1+p'+s_2,此处的++是指把前后两个字符串首尾相接。

举个例子,p=abacabap=\texttt {abacaba},则pp'可能为aabcaab\texttt{aabcaab}。随机生成两个字符串s1=zyx",s2=kjhs_1=\texttt{zyx}",s_2=\texttt{kjh}。那么h=zyxaabcaabkjhh=\texttt{zyxaabcaabkjh}

需要注意的是,从pp变换道pp'的过程中,不会添加或者删除任何字母,只会改变字母的顺序。

现在Polycarp想让你帮他编写密码哈希的校验模块。给出密码pp和生成的哈希hh,你需要检查hh是否是pp的一个哈希结果。

输入格式

第一行包含了一个正整数t(1t100)t(1\leq t\leq100)——查询的次数。

每一次查询的第一行包含了一个由小写拉丁字母组成的非空字符串pppp的长度不超过100100

每一次查询的第二行包含了一个由小写拉丁字母组成的非空字符串hhhh的长度不超过100100

输出格式

对于每一次查询,如果hhpp的一个哈希结果,就输出"YES",反之输出"NO"。

说明/提示

第一组查询的解释已经在题干中给出。

第二组查询中s1s_1s2s_2均是空串,pp'pp的一种打乱。

第三组查询中哈希不能通过密码生成。

第四组查询中s1=ns_1=\texttt{n}s2s_2是空串,p=onep'=\texttt{one}pp的一种打乱(虽然打乱并没有效果)。

第五组查询中哈希不能通过密码生成。

样例

5
abacaba
zyxaabcaabkjh
onetwothree
threetwoone
one
zzonneyy
one
none
twenty
ten
YES
YES
NO
YES
NO

在线编程 IDE

建议全屏模式获得最佳体验