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

Обсуждение задачи 1115. Корабли

I had done my best but my program still be tle on test 14...need help...
Послано FailedWing 1 окт 2005 19:17
  var
    n, m : longint;
    f : boolean;
    done : array[1..100] of boolean;
    put : array[1..100, 0..100] of longint;
    board : array[1..100] of longint;
        row, order : array[0..10] of longint;

  procedure sort;
    var
    i, j, x, y : longint;
    begin
      for i := 1 to n - 1 do
        for j := i + 1 to n do
          if board[i] < board[j]
            then begin
          x := board[i];
          board[i] := board[j];
          board[j] := x;
        end;
      for i := 1 to m - 1 do
        for j := i + 1 to m do
          if row[i] < row[j]
            then begin
          x := row[i];
          row[i] := row[j];
          row[j] := x;
          x := order[i];
          order[i] := order[j];
          order[j] := x;
        end;
    end;

  procedure init;
    var
    i, j, x : longint;
    begin
      readln(n, m);
      f := false;
          fillchar(put, sizeof(put), 0);
      fillchar(done, sizeof(done), false);
      for i := 1 to n do
        begin
              readln(board[i]);
            end;
      row[0] := 0;
      for i := 1 to m do
            begin
          readln(row[i]);
              order[i] := i;
        end;
    end;

  procedure print;
    var
    i, j, l : longint;
    begin
      for i := 1 to m do
        begin
          writeln(put[i, 0]);
          for j := 1 to put[i, 0] do
            write(put[i, j], ' ');
          writeln;
        end;
      halt;
    end;

  procedure make(k : longint);
    var
    i : longint;
    begin
      if f then exit;
      if (k = m + 1)
        then begin
          print;
          f := true;
          exit;
        end;
      for i := 1 to n do
        if (not done[i]) and (board[i] <= row[k])
          then begin
        done[i] := true;
                dec(row[k], board[i]);
                inc(put[order[k], 0]);
        put[order[k], put[order[k], 0]] := board[i];
        make(k + ord(row[k] = 0));
        if f then exit;
        dec(put[order[k], 0]);
                inc(row[k], board[i]);
        done[i] := false;
          end;
    end;

  begin
           init;
    sort;
    make(1);
  end.
Re: I had done my best but my program still be tle on test 14...need help...
Послано Jerry 16 авг 2007 19:20
Add
"Program URAL1115 in the front"
Get a compiler
Don't waste time~~~