ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1200. Рога и копыта

I can't understand, what's wrong with my program. Help, please
Послано Mephistos 19 мар 2002 17:24
type
  Sum = record
    Rub, Kop:LongInt;
  end;

var
  A, B:Sum;
  K:LongInt;

procedure Inp;
var
  _A, _B:Extended;
begin
  Read(_A, _B);
  A.Rub:=Round(_A*100) div 100;
  A.Kop:=Round(_A*100) mod 100;
  B.Rub:=Round(_B*100) div 100;
  B.Kop:=Round(_B*100) mod 100;
  Read(K);
end;

procedure Profit(Coeff:Sum; Count:LongInt; var P:Sum);
begin
  P.Rub:=Count*(Coeff.Rub-Count)+(Count*Coeff.Kop) div 100;
  P.Kop:=(Count*Coeff.Kop) mod 100;
end;

function FindMax(V:Sum):LongInt;
var
  P, Bp:sum;
  I, Max:LongInt;
begin
  FillChar(Bp, Sizeof(Bp), 0);

  for I:=0 to K do
    begin
      Profit(V, I, P);
      if (P.Rub>Bp.Rub) or ((P.Rub=Bp.Rub) and (P.Kop>Bp.Kop)) then
        begin
          Max:=I;
          BP:=P;
        end;
    end;

  FindMax:=Max;
end;

var
 BX, BY:LongInt;
 BP:Sum;

procedure Run;
var
  Xmax, Ymax:LongInt;
  X, Y:LongInt;
  P, Py:Sum;
  I, J:LongInt;
begin
  FillChar(Bp, Sizeof(BP), 0);
  Xmax:=FindMax(A);
  Ymax:=FindMax(B);
  for I:=0 to K do
    begin
      X:=I;
      if (X>XMax) then X:=XMax;
      Y:=K-I;
      if (Y>YMax) then Y:=YMax;

      P.Rub:=0; P.Kop:=0;
      Profit(A, X, P);
      Profit(B, Y, Py);
      P.Rub:=P.Rub+Py.Rub+(P.Kop+Py.Kop) div 100;
      P.Kop:=(P.Kop+Py.Kop) mod 100;
      if (P.Rub>BP.Rub) or ((P.Rub=Bp.Rub) and (P.Kop>Bp.Kop)) then
        begin
          BP:=P;
          BX:=X;
          BY:=Y;
        end;
    end;
end;

procedure Out;
begin
  Write(Bp.Rub, '.');
  if (BP.Kop<10) then Write(0, BP.Kop mod 100)
  else if (BP.Kop mod 100=0) then Write('00')
  else Write(BP.Kop mod 100);
  WriteLn;

  WriteLn(Bx, ' ', BY);
end;

begin
{  Assign(Input, 'Input.txt');
  Reset(Input);}

  Inp;
  Run;
  Out;

{  Close(Input);}
end.