Блог пользователя Oleg

Автор Oleg, 16 лет назад, По-русски
Привет

Думаю неделю над такой задачкой, ничего путного в голову не приходит:
Есть  набор чисел (N <= 100000) надо из них выбрать поднабор что бы их XOR был максимальным.

Похинтуйте, пожалуйста :)
  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится
:)
http://codeforces.me/blog/entry/1201
16 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +5 Проголосовать: не нравится
1. Если взять одно число, и заменить какое-то другое на ксор с первым, то набор ксоров всех подмножеств не изменится. 
2. Возьмем самое большое число. в нем очевидно есть самый старший бит. Заменим все числа в которых есть этот старший бит на ксор с первым числом. Ответ проксорим с нашим самым большим и выкинем его из множества.
3. Будем делать так пока в множестве не останутся один нули.

Казалось бы полученный ответ - искомый максимальный ксор. Если еще для каждого числа помнить из каких чисел начального набора оно состоит, то получим и сам набор.