CF1278A Shuffle Hashing
题目描述
Polycrap正在建立他自己的网页服务。作为一个很现代的网站其包含登入的功能。当然,这总会涉及到密码的安全问题。
Polycarp决定要储存密码的哈希值。密码的哈希值由以下这个算法来生成:
1.把只包含小写拉丁字母的密码$p$进行随机打乱,记为$p'$($p'$可能和$p$相等);
2.生成两个随机的只包含小写拉丁字母的字符串$s_1$和$s_2$(这两个串中的任何一个可能为空串);
3.哈希算法的结果$h=s_1+p'+s_2$,此处的$+$是指把前后两个字符串首尾相接。
举个例子,$p=\texttt {abacaba}$,则$p'$可能为$\texttt{aabcaab}$。随机生成两个字符串$s_1=\texttt{zyx}",s_2=\texttt{kjh}$。那么$h=\texttt{zyxaabcaabkjh}$。
需要注意的是,从$p$变换道$p'$的过程中,不会添加或者删除任何字母,只会改变字母的顺序。
现在Polycarp想让你帮他编写密码哈希的校验模块。给出密码$p$和生成的哈希$h$,你需要检查$h$是否是$p$的一个哈希结果。
输入格式
第一行包含了一个正整数$t(1\leq t\leq100)$——查询的次数。
每一次查询的第一行包含了一个由小写拉丁字母组成的非空字符串$p$。$p$的长度不超过$100$。
每一次查询的第二行包含了一个由小写拉丁字母组成的非空字符串$h$。$h$的长度不超过$100$。
输出格式
对于每一次查询,如果$h$是$p$的一个哈希结果,就输出"YES",反之输出"NO"。
说明/提示
第一组查询的解释已经在题干中给出。
第二组查询中$s_1$和$s_2$均是空串,$p'$是$p$的一种打乱。
第三组查询中哈希不能通过密码生成。
第四组查询中$s_1=\texttt{n}$,$s_2$是空串,$p'=\texttt{one}$是$p$的一种打乱(虽然打乱并没有效果)。
第五组查询中哈希不能通过密码生成。