| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么总是WA?(二叉排序树)代码如下:
Program p1002;
Const
MaxNodeNum = 2 * 100000 - 1;
Type
TNode = Record
times: Longint;
Data: String;
End;
Var
Node: Array[1..MaxNodeNum] Of TNode;
N, i, printtimes: Longint;
s, phonenum: String;
NodeNum: Longint;
Function find(s : String; root : Longint): Boolean;
Begin
If root > NodeNum Then
Exit(FALSE);
If Node[root].Data = '' Then
Exit(FALSE);
With Node[root] Do
Begin
If Data = s Then
Begin
Inc(times);
Exit(TRUE);
End
Else
Begin
If s < Data Then
Exit(find(s, 2 * root))
Else
Exit(find(s, 2 * root + 1));
End;
End;
End;
Procedure Insert(s : String; root : Longint);
Begin
If root > NodeNum Then
Exit;
With Node[root] Do
If Data = '' Then
Begin
Data := s;
Inc(times);
End
Else
Begin
If s < Data Then
Insert(s, root * 2)
Else
Insert(s, root * 2 + 1);
End;
End;
Procedure Print(root : Longint);
Begin
If root > NodeNum Then
Exit;
With Node[root] Do
If Data = '' Then
Exit
Else If times = 1 Then
Begin
Print(root * 2);
Print(root * 2 + 1);
End
Else
Begin
Print(root * 2);
Writeln(Copy(Data, 1, 3), '-', Copy(Data, 4, 4), ' ', times);
Inc(printtimes);
Print(root * 2 + 1);
End;
End;
Function Map(c : Char): Char;
Begin
Case c Of
'A'..'C':
Exit('2');
'D'..'F':
Exit('3');
'G'..'I':
Exit('4');
'J'..'L':
Exit('5');
'M'..'O':
Exit('6');
'P','R','S':
Exit('7');
'T'..'V':
Exit('8');
'W'..'Y':
Exit('9');
End;
End;
Function convert(s : String): String;
Var
ts: String;
i: Longint;
Begin
ts := '';
For i := 1 To Length(s) Do
If (s[i] >= '0') AND (s[i] <= '9') Then
ts := ts + s[i]
Else If (s[i] >= 'A') AND (s[i] <= 'Z') Then
ts := ts + Map(s[i])
Else If (s[i]>='a') AND (s[i]<='z') Then
ts:=ts + Map(upcase(s[i]));
Exit(ts);
End;
Begin
Readln(N);
NodeNum := N * 2 - 1;
For i := 1 To N Do
Begin
Readln(s);
phonenum := convert(s);
If NOT find(phonenum, 1) Then
Insert(phonenum, 1);
End;
printtimes := 0;
Print(1);
If printtimes = 0 Then
Writeln('No duplicates.');
End.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator