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

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

Can you give me some test or tell me what's wrong with my program??
Послано Pooya 17 мар 2003 21:31
const
  maxn          =101;
  maxm          =11;
var
  L,S           :array[1..maxn]of longint;
  mark          :array[1..maxn]of shortint;
  Lm,A          :array[1..maxm]of longint;
  ans           :array[1..maxm,0..maxn]of longint;
  M,N,i,j,num   :integer;

procedure swap(var x,y:longint);
var
  sw:longint;
begin
  sw:=x;x:=y;y:=sw;
end;

procedure writedata;
var
  k,i,j:integer;
begin
  for i:=1 to M do
  begin
    writeln(ans[i,0]);
    for j:=1 to ans[i,0] do
      write(L[ans[i,j]],' ');
    writeln;
  end;
end;

procedure solve;
var
  i,j:integer;
begin
  if num=m then
  begin
    writedata;
    halt;
  end;

  for i:=1 to m do
    if a[i]<Lm[i] then
      for j:=1 to n do
        if mark[j]=0 then
        begin
          mark[j]:=i;a[i]:=a[i]+L[j];
          inc(ans[i,0]);ans[i,ans[i,0]]:=j;
          if Lm[i]>=a[i] then
          begin
            if Lm[i]=a[i] then inc(num);
            solve;
            if Lm[i]=a[i] then inc(num);
          end;
          mark[j]:=0;a[i]:=a[i]-L[j];
          ans[i,ans[i,0]]:=0;dec(ans[i,0]);
        end;
end;

begin
{  assign(input,'A.in');reset(input);{!!!!!!!}}

  read(n,m);
  for i:=1 to n do begin read(l[i]);s[i]:=i; end;
  for i:=1 to m do read(Lm[i]);

  for i:=1 to n do
    for j:=i+1 to n do
      if l[i]<l[j] then
      begin
        swap(l[i],l[j]);
        swap(s[i],s[j]);
      end;
  solve;
end.
A new program that gets TLE can you help me to get AC?
Послано Pooya 17 мар 2003 23:37
I wrote a new program but it got TLE can you help me to get AC.
this is my program:

const
  maxn          =100;
  maxm          =10;
var
  a,l,lm        :array[1..maxn]of longint;
  ans           :array[1..maxm,0..maxn]of integer;
  i,j,n,m,k,sw  :longint;

procedure swap(var x,y:longint);
begin
  sw:=x;x:=y;y:=sw;
end;

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

procedure solve(k:integer);
var
  i,j:integer;
begin
  if k=n+1 then
    writedata;

  for i:=1 to m do
  begin
    if lm[i]>=a[i]+l[k] then
    begin
      inc(ans[i,0]);ans[i,ans[i,0]]:=k;inc(a[i],l[k]);
      solve(k+1);
      ans[i,ans[i,0]]:=0;dec(ans[i,0]);dec(a[i],l[k]);
    end;
  end;
end;

begin
  readln(n,m);
  for i:=1 to n do read(l[i]);
  for i:=1 to m do read(lm[i]);
  for i:=1 to n do
    for j:=i+1 to n do
      if l[i]<l[j] then
        swap(l[i],l[j]);

  solve(1);
end.