Adamos, ксорить-то зачем? Через and считаете нули в обеих строках. Делить надо на нули в искомой строке - их количество отдельно подсчитайте.
Будет быстрее, конечно, если хранить и обрабатывать строки как целые 64-битные числа. Потому что символы вы по одному сравниваете, а биты по 64 за раз. Естественно, подсчет единичных бит в ответе надо делать хитрее, чем проверка каждого бита. Или через таблицу на 16 бит и 4 к ней обращения, или через 8 сдвигов и сложений. Плюс читать и обрабатывать предется в 8 раз меньше байт.
hasound, Так уже нет проблем с aliasing и выравниванием. Можно обращаться к long long по char* (но нельзя наоборот!). Но лучше memcpy(&id, buffer, sizeof(id));.
Adamos, Помимо выравнивания, дело еще в strict aliasing. Ну вот нельзя обращаться к данным по указателю не того типа (за редкими исключениями, которые тут не применимы). Компилятор может там всякого наворотить. Это UB.
NikitaRyabukhin Непонятна задача. Вам надо как-то минимизировать список множеств так, чтобы все заданные множества были подмножествами этих? Надо ли, чтобы каждое подмножество множества в ответе было во входном списке?
Я был не прав, этот variadic macro тут не поможет. Я думал там можно, как в функциях выделять один из параметров и что-то с ним делать, но нет - просто тупо все аргументы идут скопом, хоть их и может быть произвольное количество.
Dmitrii, По идее надо повторять тест кучу раз. Чтобы суммарное время исполнения было порядко 10 секунд для такого короткого теста. Потом уже время надо будет делить на количество повторений. Потому что вот так вы меряете микросекунды и там уровень шума запредельный. ОС решит сервис какой-нибудь запустить на ядре, которое ваш код выполняет - и тест отработает на порядок медленее. Плюс кеш. По идее надо его еще и прогревать (первые сотню раз запустить код, но время его работы проигнорировать)
ChastIOtvaga, ээээм. Посмотрите на ваш код в вопросе в main. Посмотрите на этот код. Никакой разницы не видите? После копипастентч кода надо его хоть разок прочитать-то перел отправкой.
И вообще, у вас тест есть. С нужным выводом. Запустите локально и отдебажте.
Adamos, Ну будет оно вместо 60 секунд работать 50 (при тайм лимите в 1 секунду). Вы так даже в 2 раза не ускорите, наверное, когда как надо ускорять в десятки.
Это вот та самая "преждевременная оптимизация" про которую говорил Дональд Кнут. Сначала надо выбрать правильный алгоритм и структуру данных. А уже потом можно сокращать выделения памяти, вычисления и битовые трюки применять.