hdu 4041 Eliminate Witches!

用栈去模拟

弹栈出栈就做完了

当时还没转c

用p写的

 

program aaa;
var sl,n,m,i,j,k,tb,tc,x:longint;
    a:array[1..60000] of string;
    b,c,t:array[1..1000000] of longint;
    s,st:ansistring;
    flag:boolean;

begin
readln(k);
for x:=1 to k do
 begin

  fillchar(t,sizeof(t),0);
  fillchar(c,sizeof(c),0);
  fillchar(b,sizeof(b),0);
  readln(s);

  sl:=length(s);
  while s[sl]=' ' do  dec(sl);
  i:=1;st:='';m:=0;
  n:=0;tb:=0;tc:=0;
  while i<=sl do
   begin

    while (s[i]<>'(') and (s[i]<>')') and (s[i]<>',') and(i<=sl) do
     begin
      flag:=false;
      st:=st+s[i];
      i:=i+1;
     end;

     if (st<>'') then begin n:=n+1;a[n]:=st;tb:=tb+1;b[tb]:=n;m:=m+1;t[m]:=n;
                         st:='';
                       end;


     if s[i]='(' then
            begin
             tc:=tc+1;c[tc]:=tb;
            end;
     if s[i]=')' then
              begin
               tb:=c[tc];
               m:=m+1;
               t[m]:=b[tb];
               tc:=tc-1;
               end;
     if s[i]=',' then
               begin
                m:=m+1;
                t[m]:=b[c[tc]];
               end;

    inc(i);
   end;
   writeln(n);
   for i:=1 to n do
    writeln(a[i]);
   for i:=1 to m-1  do writeln(t[i],' ',t[i+1]);
   writeln;
  end;
 end.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值