洛谷 P1928 外星密码

洛谷 P1928 外星密码


题目

题目描述

有了防护伞,并不能完全避免 2012 的灾难。地球防卫小队决定去求助外星种族的帮 助。经过很长时间的努力,小队终于收到了外星生命的回信。但是外星人发过来的却是一 串密码。只有解开密码,才能知道外星人给的准确回复。解开密码的第一道工序就是解压 缩密码,外星人对于连续的若干个相同的子串“X”会压缩为“[DX]”的形式(D 是一个整 数且 1≤D≤99),比如说字符串“CBCBCBCB”就压缩为“[4CB]”或者“[2[2CB]]”,类 似于后面这种压缩之后再压缩的称为二重压缩。如果是“[2[2[2CB]]]”则是三重的。现 在我们给你外星人发送的密码,请你对其进行解压缩。

输入输出格式

输入格式:
第一行:一个字符串

输出格式:
第一行:一个字符串

输入输出样例

输入样例#1:

AC[3FUN]

输出样例#1:

ACFUNFUNFUN

说明

【数据范围】

对于 50%的数据:解压后的字符串长度在 1000 以内,最多只有三重压缩。

对于 100%的数据:解压后的字符串长度在 20000 以内,最多只有十重压缩。 对于 100%的数据:保证只包含数字、大写字母、’[‘和’]‘


题解

分治+模拟

注意:当且仅当’[‘后为数字时,才算是压缩,并且’[‘后的数字长度最多为2位


代码(Pascal)

var s,ans:ansistring;
    p,w:longint;
 procedure init;
  begin
    readln(s);
   end;
 function zip(x:longint):ansistring;
  var i,time:longint;
      q:ansistring;
   begin
     w:=0;
     time:=ord(s[x])-48;q:='';zip:='';
     if (s[x+1]<='9')and('0'<=s[x+1]) then begin
                                             time:=time*10+ord(s[x+1])-48;
                                             inc(x);
                                            end;
     inc(x);
     while (s[x]<>']')or(w<>0) do
      begin
        if s[x]=']' then dec(w);
        if s[x]='[' then
         if (s[x+1]>='0')and(s[x+1]<='9') then
          begin
            q:=q+zip(x+1);
            x:=p;
           end
          else inc(w)
         else q:=q+s[x];
        inc(x);
       end;
     p:=x;
     for i:=1 to time do
      zip:=zip+q;
    end;
 procedure main;
  var i:longint;
   begin
     i:=1;ans:='';
     while i<=length(s) do
      begin
        if (s[i]='[')and(s[i+1]<='9')and(s[i+1]>='0') then
         begin
           write(zip(i+1));
           i:=p;
          end
         else write(s[i]);
        inc(i);
       end;
    end;
 begin
   init;
   main;
  end.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值