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 |
Why WA??program pku1245; type team = record //team = # de teams en el contest nom :string[20]; //nom; geo : integer; rank : array[1..7] of integer; ac:integer; total:integer; end; arecord = array[1..30] of team; procedure leo_nombre(var equipos:arecord;var i:integer); var car:char; pal:string; begin pal:=''; repeat read(car); if (car <> ' ') then pal:=pal+car; until car = ' '; equipos[i].nom:=pal; end; procedure intercambia(var equipos:arecord; var i,j:integer); var temp:team; begin temp:=equipos[j]; equipos[j]:=equipos[i]; equipos[i]:=temp; end; function compara(var cad1,cad2:string[20]):boolean; var long1,long2,i:integer; car:char; pal1,pal2:string[20]; begin long1:=length(cad1); long2:=length(cad2); pal1:=''; pal2:=''; for i:= 1 to long1 do begin car:=upcase(cad1[i]); pal1:=pal1+car; end; for i:= 1 to long2 do begin car:=upcase(cad2[i]); pal2:=pal2+car; end; if pal1 > pal2 then compara:=true else compara:=false; end; procedure ordenar_registro(var equipos:arecord; var n:integer); var i,j,pivote,p,q:integer; begin for i:= 1 to n-1 do begin for j:= 1 to n-i do begin if compara(equipos[j].nom,equipos[j+1].nom) then begin p:=j; q:=j+1; intercambia(equipos,p,q); end; end; end; for i:= 1 to n - 1 do begin for j:= 1 to n-i do begin if (equipos[j].geo > equipos[j+1].geo) then begin p:=j; q:=j+1; intercambia(equipos,p,q); end; end; end; for i:= 1 to n - 1 do begin for j:= 1 to n-i do begin if (equipos[j].total > equipos[j+1].total) then begin p:=j; q:=j+1; intercambia(equipos,p,q); end; end; end; for i:= 1 to n - 1 do begin for j:= 1 to n-i do begin if (equipos[j].ac < equipos[j+1].ac) then begin p:=j; q:=j+1; intercambia(equipos,p,q); end; end; end; end; function output(var equipo:arecord; var a:integer):boolean; begin if ((equipo[a].geo = equipo[a-1].geo) and (equipo[a].ac = equipo[a-1].ac) and (equipo[a].total = equipo[a-1].total)) = true then output := true else output :=false; end; var i,teams,j,score,n,sum,hechos,geofinal,contest,p,k,T:integer; geome:real; equipos: arecord; cad1,cad2:string; begin contest:=0; while not eof() do begin readln(teams); inc(contest); //leo el numero de equipos. if (teams = 0) then break; for i:= 1 to teams do begin n:=i; leo_nombre(equipos,n); //va dejar en ' ' 0 0 0 0 sum:=0; geome:=0; hechos:=0; for j:= 1 to 7 do //leo el numero de equipos begin read(score);//leo los tiempos sum:= sum + score;//sumo los tiempos if (score <> 0) then begin inc(hechos); //me indica la cantidad de problemas resueltos. geome:=geome+ ln(score); end; equipos[i].rank[j]:=score; end; //readln; if hechos <> 0 then geofinal:= trunc(exp(geome/hechos)+0.5) else geofinal:=0; //asigno en el registro los valores. equipos[i].geo:=geofinal; equipos[i].ac:=hechos; equipos[i].total:=sum; readln; end; //end del for i //llenado todo el arreglo ahora solo falta Ordenar e imprimir //programa al 50% xd //PROGRAMA PERFECTO HASTA ACµ Xd ordenar_registro(equipos,teams); //iMPRESIàN DEL REGISTRO ORDENADO. writeln('CONTEST ',contest); T:=1; for i:= 1 to teams do begin k:=i; if (k <> 1) and (output(equipos,k) = true) then //output me dice si son iguales. begin if (T < 10) then write(0); write(T); end else begin if (k < 10) then write(0); write(k); T:=k; end; write(' '); //el programa solo pide ordenar por problemas hechos q tela. write(equipos[i].nom); for k:= 1 to 10-length(equipos[i].nom) do write(' '); write(equipos[i].ac:2,equipos[i].total:5,equipos[i].geo:4); write(equipos[i].rank[1]:4,equipos[i].rank[2]:4); write(equipos[i].rank[3]:4,equipos[i].rank[4]:4); write(equipos[i].rank[5]:4,equipos[i].rank[6]:4); writeln(equipos[i].rank[7]:4); end; end; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator