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

Обсуждение задачи 1021. Таинство суммы

I have an O(1) way to find the answer.
Послано grayluck 10 сен 2009 08:34
just put all the numbers in a array of boolean.

var
  n,i,caint:longint;
  b:array[-100000..100000]of boolean;
begin
  readln(n);
  fillchar(b,sizeof(b),false);
  for i := 1 to n do
    begin
      readln(caint);
      b[caint]:=true;
    end;
  readln(n);
  for i := 1 to n do
    begin
      readln(caint);
      if b[10000-caint] then
        begin
          writeln('YES');
          halt;
        end;
    end;
  writeln('NO');
end.

Edited by author 10.09.2009 08:34
Re: I have an O(1) way to find the answer.
Послано Pavel Sergeev 15 окт 2009 00:28
I think it is O(n2)
Re: I have an O(1) way to find the answer.
Послано SkidanovAlex 15 окт 2009 11:04
It is O(n), not O(1)

And there's another O(n) solution for this problem, which requires only O(n) memory instead of O(v) in your case, where v is max value of a_i.
Re: I have an O(1) way to find the answer.
Послано nguyenductam 3 апр 2010 11:13
Yes , SkidanovAlex right. O(n).
Re: I have an O(1) way to find the answer.
Послано Mariana 24 сен 2012 16:31
thanks