Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

MLE 了,不知有什么改进的方法……

Posted by WishingWell at 2004-08-03 16:26:30 on Problem 1002
  const
    p : array [1..26] of string[1] =
   ('2', '2','2', '3', '3', '3', '4', '4', '4', '5', '5', '5', '6', '6', '6', '7',
    '7', '7', '7', '8', '8', '8', '9', '9', '9', '9');
  type pnode = ^tnode;
       tnode = record
         left, right : pnode;
         nums : string[7];
         count : longint;
  end;
  var
    root, node : pnode;
    instr : string;
    n, i : longint;
  procedure insert_node(s : string);
    var i : integer; t : string[7]; x, y : pnode; same : boolean;
    begin
      t := '';
      while pos('-', s) > 0 do delete(s, pos('-', s), 1);
      for i := 1 to 7 do
        begin
          if (s[i] >= 'A') and (s[i] <= 'Z') then t := t + p[ord(s[i]) - ord('A') + 1];
          if (s[i] >= '0') and (s[i] <= '9') then t := t + s[i];
        end;

      new(node);
      node^.nums := t;
      node^.count := 1;
      node^.left := nil;
      node^.right := nil;

      y := nil;
      x := root;
      same := false;
      while (x <> nil) do
        begin
          y := x;
          if t < x^.nums then x := x^.left else
          if t > x^.nums then x := x^.right else
          if t = x^.nums then
            begin
              inc(x^.count);
              same := true;
              exit;
            end;
          if same then exit;
        end;
      if same then exit;
      if (y = nil) then root := node else
        if t < y^.nums then y^.left := node else
        if t > y^.nums then y^.right := node;
    end;
  procedure print_tree(x : pnode);
    var i : byte;
    begin
      if x <> nil then
        begin
          print_tree(x^.left);
          if x^.count > 1 then
            begin
            for i := 1 to 3 do
            write(x^.nums[i]);
            write('-');
            for i := 4 to 7 do
            write(x^.nums[i]);
            writeln(' ', x^.count);
            end;
          print_tree(x^.right);
        end;
    end;
  begin
    new(root);
    root := nil;
    readln(n);
    for i := 1 to n do
      begin
        readln(instr);
        insert_node(instr);
      end;
    print_tree(root);
  end.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator