В этой теме описано, как пройтись по всем подмаскам данной маски без дополнительных памяти и времени. Мне стало нужно сделать то же самое для надмасок, но я не нашёл ничего подобного. Исходя из формулы mask ^ (~mask) = -1
, мой брат сгенерировал следующий код:
for (int over = (1 << n) - 1; over > 0; over = ((over - mask - 1) & ~mask) + mask) {
cout << over << " ";
}
Это и правда работает. Но нельзя ли это как-то упростить, чтобы было легче вспомнить это на контесте?