Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2013, 14:47   #1
droxeda
Новичок
Джуниор
 
Регистрация: 30.01.2013
Сообщений: 3
Восклицание Задача. Опять двойка!

Помогите пожалуйста, вопрос жизни и смерти

Задача 1. Опять двойка!
Ограничение по времени: 1 секунда на тест
Во входном файле задано N целых чисел, каждое из которых находится в диапазоне [1..231-
1]. Подсчитайте количество чисел, встречающихся в этом файле, которые можно представить в
виде 2k, где k — целое число.
Входные данные
В первой строке входного файла записано одно целое число N (0 < N ≤ 106).
Во второй строке — N целых чисел, разделенных пробелами.
Выходные данные
В выходной файл нужно записать одно целое число — количество чисел, удовлетворяющих
условию задачи.
Пример
input.txt

10
2 4 16 100000 5 3 8 2048 16 16
output.txt

7
droxeda вне форума Ответить с цитированием
Старый 30.01.2013, 15:07   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Во входном файле задано N целых чисел, каждое из которых находится в диапазоне [1..231-
1].
Тоесть в диапазоне [1..230] или [1..2311] ?
И в любом случае число в тесте (100000) не удовлетворяет условию задачи
Poma][a вне форума Ответить с цитированием
Старый 30.01.2013, 15:10   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

1..2^31 -1 имхо
Код:
if A mod 2 = 0 then inc(count);
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 30.01.2013, 15:10   #4
ep1a
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Тоесть в диапазоне [1..230] или [1..2311] ?
И в любом случае число в тесте (100000) не удовлетворяет условию задачи
как я понял - там (2^31)-1

Автору топика: можно завести массив из 31 элемента, где A[n]=2^(n-1). ну а потом сверять очередное число с каждым элементом этого массива. ответ ясен?
ep1a вне форума Ответить с цитированием
Старый 30.01.2013, 15:29   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
1..2^31 -1 имхо
Спасибо.
Цитата:
if A mod 2 = 0 then inc(count);
А что говорит пример? Что если 2 числа, то проверяем только одно из них..
Цитата:
где A[n]=2^(n-1)
Тогда уж a[n]=2*(n-1)

Но это ОЧЕНЬ неэффективно, и боюсь не уложит в 1 секунду..

Нужно отбрасывать повторяющиеся элементы..
Мой вариант, не проверял :
Код:
begin
    ReadLn (n);

    // специально что-то забыл

    for i := 1 to n do begin
       Read (t);
       j := 1;
       while (j <= count) and (a[j] <> t) do
           Inc (j);
       if j > count then begin
          Inc (count);
          a[count] := t
       end;
 
    // что-то специально забыл

    for i := 1 to count do
         if not Odd (a[i]) then
            Inc (res);

    WriteLn (res)
end.
Poma][a вне форума Ответить с цитированием
Старый 30.01.2013, 15:41   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Зачем вообще массив - читаем очередное число и проверяем делится ли на 2 нацело. Подозреваю, что Odd медленее mod 2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 30.01.2013 в 15:43.
Аватар вне форума Ответить с цитированием
Старый 30.01.2013, 15:42   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Аватар, гляньте пример ТС, там стоит два числа 16, НО щетчик увеличивается на этих 2-ух числах только 1 раз!
Poma][a вне форума Ответить с цитированием
Старый 30.01.2013, 15:43   #8
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

только еще вопрос там 2*K или 2^k
Цитата:
А что говорит пример? Что если 2 числа, то проверяем только одно из них..
имелось в виду какбе
Код:
while not eof(f) do begin
read(a);
if A mod 2 = 0 then inc(count);
end;
Цитата:
там стоит два числа 16
там стоит 3 числа 16
значит все таки 2^k
и как раз 7 чисел)
Цитата:
2 4 16 100000 5 3 8 2048 16 16
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 30.01.2013 в 15:48.
Mad_Cat вне форума Ответить с цитированием
Старый 30.01.2013, 15:46   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
количество чисел, удовлетворяющих условию задачи
Слова разных не вижу
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.01.2013, 16:00   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Подозреваю, что Odd медленее mod 2
тыц
Цитата:
Слова разных не вижу
Тоже не вижу, тогда как же объяснить ответ в примере?

UPD
Цитата:
там стоит 3 числа 16
значит все таки 2^k
и как раз 7 чисел)
Точняк.. Однако со зрением у меня проблемы
Плюсую (ан нет.. не разрешает )

Последний раз редактировалось Poma][a; 30.01.2013 в 16:10.
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
опять я опять мемо nyasha2013 Помощь студентам 2 19.05.2011 21:09
Двойка Pascal.t Паскаль, Turbo Pascal, PascalABC.NET 4 21.12.2010 18:57
Опять же задача в Паскале! d00ker Помощь студентам 2 03.02.2009 14:38
Задача,опять же с матрицей groth88 Паскаль, Turbo Pascal, PascalABC.NET 3 16.04.2008 13:22