| ||||||||||
| 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