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 |
指针做链表为什么会超时,请帮俺分析分析。Program p1002(input,output); Type telpoint=^telnode; telnode=record num,times:longint; link:telpoint; end; teltp=record head,next,last:telpoint; end; var i,n,tel:longint; tellist:teltp; s:string; c:char; Procedure Insert(tel:longint); var p:telpoint; begin tellist.next:=tellist.head; tellist.last:=tellist.next^.link; while (tellist.last<>NIL) and (tellist.last^.num<tel) do begin tellist.next:=tellist.last;tellist.last:=tellist.last^.link; end; if (tellist.last<>NIL) and (tellist.last^.num=tel) then inc(tellist.last^.times) else begin new(p);p^.num:=tel;p^.times:=1; tellist.next^.link:=p; p^.link:=tellist.last; end; end;//procedure Insert Procedure c2n(var c:char); begin If (c='A') or (c='B') or (c='C') then c:='2' Else if (c='D') or (c='E') or (c='F') then c:='3' ELse if (c='G') or (c='H') or (c='I') then c:='4' Else if (c='J') or (c='K') or (c='L') then c:='5' Else if (c='M') or (c='N') or (c='O') then c:='6' Else if (c='P') or (c='R') or (c='S') then c:='7' Else if (c='T') or (c='U') or (c='V') then c:='8' Else if (c='W') or (c='X') or (c='Y') then c:='9' Else c:='0'; end;//procedure char convert to number Procedure Print; begin Str(tellist.next^.num,s); while length(s)<7 do s:=Concat('0',s);//Insert('0',s,1); writeln(Copy(s,1,3),'-',Copy(s,4,4),' ',tellist.next^.times); end;//procedure print; Begin Assign(input,'p1002.in');Reset(input); Readln(n); New(tellist.head); With tellist.head^ do begin num:=0;times:=0;link:=NIL;end; tellist.next:=tellist.head;tellist.last:=tellist.next^.link; While n>0 do begin Readln(s); While pos('-',s)<>0 do Delete(s,pos('-',s),1); For i:=1 to Length(s) do if not(s[i] in ['0'..'9']) then c2n(s[i]); Val(s,Tel);Insert(Tel); dec(n); end; //Print; while tellist.head<>NIL do begin tellist.next:=tellist.head; tellist.head:=tellist.head^.link; if tellist.next^.times>1 then Print; Dispose(tellist.next); end; Close(Input); End. Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator