T13735 fateice-string洛谷八连测2

来源:互联网 发布:手机万能遥控器软件 编辑:程序博客网 时间:2024/05/24 05:25
【题目描述】:两天前,被授予启动能力的斯雷因·特洛耶特伯爵准备对启动装置进行加密,以防有人趁其不备破坏装置。

他将这个任务交给了他的心腹哈库莱特。忠实的哈库莱特认为,只需要输入密码就能解锁的加密装置实在是太不安全了,所以他决定用一个特别的加密装置来对Aldnoah启动装置进行保护。

他精心设计了这样一套加密装置:

该装置会给定解密者两个字符串s,t,其中s只包含小写字母以及*,t只包含小写字母。解密者可以进行任意多次操作,每次选择s中的一个*,将它修改为任意多个(可以是0个)它的前一个字符。询问是否能将s修改为t。

聪明的哈库莱特当然不会只给予解密者一组数据啦,所以解密时会有多组数据出现,并且每组数据只有在规定时间内答对才能够继续解密下一组数据。

今天他制作好了加密装置交给了斯雷因·特洛耶特伯爵,斯雷因准备先进行测试过后再将它安装在启动装置上。他随机制造了几组测试数据输入装置,然后让哈库莱特进行解密。哈库莱特会怎么做呢?

输入输出格式

输入格式:

第一行一个整数T表示数据组数。

每组数据两行,第一行一个字符串s,第二行一个字符串t。

输出格式:

每组数据输出一行,如果能将s修改为t,输出Yes,否则输出No。

输入输出样例

输入:
2a*aaaaa*ab
输出:

YesNo
个人代码:

var
 s,t:array[1..30001]of char;
 n,i,ss,tt:longint;
 bo:boolean;
Procedure gai;
var i,j:longint;
begin
 bo:=true;
 i:=1; j:=1;
 repeat
  if t[i]=s[j] then begin inc(i); inc(j); end
   else
    begin
     if s[j]<>'*'then begin
       bo:=false;
       break;
      end
     else begin
      s[j]:=s[j-1];
      if s[j]<>t[i] then begin
         bo:=false;
         break;
       end
      else
       while s[j]=t[i] do inc(i);
     end;
     inc(j);
   end;
 until (j>ss)or(i>tt);
 if i<tt then bo:=false;
end;
BEGIN
 readln(n);
 for i:=1 to n do
  begin
   ss:=1;
   while not eoln do
     begin
      read(s[ss]); inc(ss);
     end;
   readln;
   tt:=1;
   while not eoln do
     begin
       read(t[tt]); inc(tt);
     end;
   readln;
   gai;
   if bo=false then writeln('No')
    else writeln('Yes');
  end;
END.