5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
||||||
1 | ||||||
Определить, на сколько бит различаются два числа04.03.2017, 20:30. Показов 3249. Ответов 30
Метки нет (Все метки)
Привет всем у меня такой вапрос )
как узнать на сколько битов различаеться два числа ?? неужели надо переводить в двоичную СМ и потом смотреть различие напр 12 и 8 12 = 1100 8=1000 они различаються на один бит т.к вторая цифра числа 12 есть 1 а у 8 есть 0 ? суть задачи такая дано (n и k ) и a1,a2,a3....an n<=10000 ИСПРАВЛЕНО: n<=100000 надо найти количество пар чисел что они различаються на k бит ? пример 4 1 0 3 2 1 ответ (1, 3), (1, 4), (2, 3), (2, 4). всего 4 ! я решил эту задачу так
ограничения времени 2 сек что делать ? ) зарания спасибо )
0
|
04.03.2017, 20:30 | |
Ответы с готовыми решениями:
30
Определить, сколько битов в числах N1 и N2 различаются Определить, чем различаются два экземпляра одного класса Определить сколько раз встречается последовательно два числа одного знака |
Модератор
|
|
04.03.2017, 20:57 | 2 |
XOR обоих чисел и подсчёт единиц.
Добавлено через 5 минут А какие ограничения на сами числа?
0
|
5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
|
04.03.2017, 21:00 [ТС] | 3 |
k<=14
a[i]<=10^5
0
|
Модератор
|
|
04.03.2017, 21:01 | 4 |
Ускорение подсчёта бит
http://myworkonly.blogspot.ru/... st_05.html https://habrahabr.ru/post/276957/
0
|
5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
|
04.03.2017, 21:07 [ТС] | 5 |
это там просто на с++ )) не понятно
не могли бы на паскале помочь?) xor и подсчет кол единиц правильно но не проходит по времени (
0
|
Модератор
|
|
04.03.2017, 21:09 | 6 |
Сообщение было отмечено ProHacker как решение
Решение
Я бы сделал подсчёт комбинированным способом.
Сделал бы предзаполненный массив Bits[0..255] такой, что Bits[i] содержит количество единичных бит в числе i (0<=i<=255). Потом этот массив использовал для подсчёта количества единичных бит в числе x:=a[i] xor a[j] kol:=Bits[Lo(x)]+Bits[Hi(x)] Ну и дальше - как у вас в коде.
0
|
5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
|
04.03.2017, 21:12 [ТС] | 7 |
а можете полный код написать плз ))
0
|
Модератор
|
|
04.03.2017, 21:18 | 8 |
Сообщение было отмечено ProHacker как решение
Решение
А как вы так быстро проверили и XOR и подсчёт?
Ну посчитайте единицы делением (как умеете) и занесите в массив Bits[i]. При больших объёмах даст существенный выигрыш. Добавлено через 1 минуту Нет, сейчас, точно - нет. Мне необходимо отлучиться. А когда вернусь - будет пора спать. Попробуйте вариант с массивом.
0
|
5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
||||||
04.03.2017, 22:39 [ТС] | 9 | |||||
на вопрос как я проверяю xor и подсчет единиц
я делаю так
Добавлено через 9 минут Я бы сделал подсчёт комбинированным способом. Сделал бы предзаполненный массив Bits[0..255] такой, что Bits[i] содержит количество единичных бит в числе i (0<=i<=255). Потом этот массив использовал для подсчёта количества единичных бит в числе x:=a[i] xor a[j] kol:=Bits[Lo(x)]+Bits[Hi(x)] Ну и дальше - как у вас в коде а что вы имеели в в lo(x) и Hi(x) ? Добавлено через 1 час 11 минут Народ помогите )
0
|
Модератор
|
||||||
05.03.2017, 00:15 | 10 | |||||
Отладочный вариант
0
|
Модератор
|
||||||
05.03.2017, 01:00 | 11 | |||||
ФедосеевПавел,
для 10^5 достаточно 17 бит. Или 20 бит выбрано исходя из каких-то иных соображений? Добавлено через 23 минуты Вариант с 2-я таблицами в среднем: Код
$ time echo 10000 5 | ./z real 0m0.257s user 0m0.243s sys 0m0.008s
Код
$ time echo 10000 5 | ./z real 0m0.391s user 0m0.360s sys 0m0.008s
1
|
5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
|
05.03.2017, 01:46 [ТС] | 12 |
жалко что по времени не проходит (
0
|
Модератор
|
|
05.03.2017, 01:51 | 13 |
Делал в полусне и 10^5 оценил в двоичном виде как 20 бит.
ProHacker, а где вы проверяете? И измените 20 на 17 - может поможет... Добавлено через 36 секунд И какой код вы даёте системе?
0
|
5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
|
05.03.2017, 01:54 [ТС] | 14 |
я ваш код не могу запустить так как мой паскаль говорит неизвестный идентификатор high
в цикле for i:=0 to ...
0
|
Модератор
|
|
05.03.2017, 02:02 | 15 |
Замените на соответствующее значение high
Добавлено через 1 минуту И вы не ответили 1. сайт 2. что за код вы даёте системе Добавлено через 2 минуты Когда я учился в школе - на 4 компьютерах было 5 или 6 диалектов BASIC, и были книги и журналы ещё на другие 5-6 диалектов. Ничего - как-то же набирали, учились...
0
|
5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
|
05.03.2017, 02:09 [ТС] | 16 |
ваш код проходит по времени очень даже хорошо
но вот 13 тест там не проходит почему то может у вас есть там баг ? Добавлено через 49 секунд код ошибки ошибка исполнения Добавлено через 2 минуты ну сайт я вам сказать не могу )) это большой секрет )) и я отправляю ваш код Добавлено через 2 минуты а вот код вашего колеги не проходит по времени 13 тест а у вас наоборот выходит ошибка исполнения
0
|
Модератор
|
|
05.03.2017, 02:14 | 17 |
Увеличьте разрядность одной переменной Amount до uint64 или qword.
Вы не можете отправлять мой код - он отладочный и не вводит переменных. Добавлено через 1 минуту И не у меня - а у вас. Мне эта задача с секретного сайта - до лампочки.
0
|
5 / 5 / 0
Регистрация: 20.06.2016
Сообщений: 87
|
|
05.03.2017, 02:19 [ТС] | 18 |
я просто дописал что вводил переменные ))
Добавлено через 4 минуты нашел ошибку ) у вас там в коде a:array[0..10000] а надо до a:array[0.100000] но по времени что то не прошло ( я ошибался когда сказал что у вас по времени проходит Добавлено через 1 минуту извините что я сам в начале написал что n<=10000 она должна быть n<=100000
0
|
Модератор
|
|
05.03.2017, 02:47 | 19 |
Значит нужно уменьшать количество вариантов перебора.
Может быть сортировать по количеству бит и сравнения делать по потенциальным группам, а не с остатками массива.
0
|
Модератор
|
||||||
05.03.2017, 11:00 | 20 | |||||
При n:1..100000 нужно искать другой алгоритм, текущий не сильно лучше квадратичного от n.
Первое, что приходит в голову, считать количество чисел с подходящей разностью, количество пар считать по формулам комбинаторики. Ведь сами пары не нужны, достаточно найти только их количество. Добавлено через 43 минуты Что-то вроде:
Для r в строгом смысле не хватает Longint, т.к. в худшем случае 50000 одного числа, 50000 другого, 2_500_000_000 всего и это больше 2_147_483_647. Кстати, в условии не сказано, не нужно ли при подсчете количества исключать дубликаты, если такие будут... Добавлено через 3 минуты ФедосеевПавел, что думаете по поводу алгоритма?
0
|
05.03.2017, 11:00 | |
05.03.2017, 11:00 | |
Помогаю со студенческими работами здесь
20
Даны два натуральных числа. Определить сколько чисел на отрезке между ними являются факториалами Вводятся два целых числа. Определить, сколько парных чисел находится между ними и найти их сумму При сложении по модулю два двух чисел по 48 бит пропадает 1 бит На сколько GT740m 128 бит производительней GT740 64 бит Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |