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; const max=100000; type ar=record num,times:longint; end; var same,m,n,number,times:longint; call:array[1..max] of ar; procedure getnumber; var i,k,code:integer; base:longint; strings,rest:string; begin readln(strings); rest:=''; for i:=1 to length(strings) do if (strings[i] in ['0'..'9'])or (strings[i] in ['A'..'Y']) then rest:=rest+strings[i]; for i:=1 to length(rest) do if rest[i] in ['A'..'Y'] then if rest[i]<'Q' then rest[i]:=chr(((ord(rest[i])-65) div 3+2)+48) else rest[i]:=chr(((ord(rest[i])-66) div 3+2)+48); base:=1000000; number:=0; for i:=1 to 7 do begin val(rest[i],k,code); number:=number+longint(base*k); base:=base div 10; end; end; function min(x,y:longint):longint; begin if x<y then min:=x else min:=y; end; procedure builtheap; var mid:ar; k:longint; begin call[n].num:=number; call[n].times:=1; k:=n; while (k div 2>0)and(call[k div 2].num>=call[k].num) do begin if call[k div 2].num>call[k].num then begin mid:=call[k div 2]; call[k div 2]:=call[k]; call[k]:=mid; k:=k div 2; end else if call[k div 2].num=call[k].num then begin inc(call[k div 2].times); call[k]:=call[n]; call[n].num:=0; call[n].times:=0; dec(n); while (call[k].num>min(call[2*k].num,call[2*k+1].num))and (2*k<=n) do begin if (2*k+1>n)or ((2*k+1<=n)and(call[2*k].num<call[2*k+1].num)) then begin mid:=call[k]; call[k]:=call[2*k]; call[2*k]:=mid; k:=2*k; end else begin mid:=call[k]; call[k]:=call[2*k+1]; call[2*k+1]:=mid; k:=2*k+1; end; end; break; end; end; end; procedure getmin; var mid:ar; k:longint; begin number:=call[1].num; times:=call[1].times; k:=1; call[k]:=call[n]; call[n].num:=0; call[n].times:=0; dec(n); while (call[k].num>min(call[2*k].num,call[2*k+1].num))and (2*k<=n) do begin if (2*k+1>n)or ((2*k+1<=n)and(call[2*k].num<call[2*k+1].num)) then begin mid:=call[k]; call[k]:=call[2*k]; call[2*k]:=mid; k:=2*k; end else begin mid:=call[k]; call[k]:=call[2*k+1]; call[2*k+1]:=mid; k:=2*k+1; end; end; end; procedure print; var i:integer; base:longint; begin base:=1000000; for i:=1 to 7 do begin write(number div base); number:=number mod base; base:=base div 10; if i=3 then write('-'); end; writeln(' ',times); inc(same); end; procedure doing; var i:longint; begin same:=0; for i:=1 to max do begin call[i].num:=0; call[i].times:=0; end; readln(m); n:=0; for i:=1 to m do begin getnumber; inc(n); builtheap; end; m:=n; times:=0; for i:=1 to m do begin getmin; if times>1 then print; end; if same=0 then writeln('No duplicates.'); end; begin {assign(input,'1002.in'); reset(input);} doing; {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