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 |
Re:各位高手,谁能帮我看看程序,感激不尽。我实在是不知道哪里错了。In Reply To:各位高手,谁能帮我看看程序,感激不尽。我实在是不知道哪里错了。 Posted by:Birdsong at 2005-03-19 23:09:03 > 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