Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Why WA??

Posted by MaNIaC2009 at 2010-04-07 14:16:54 on Problem 1245
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator