Автор задачі: | Мохаммед Нассір (MOAGEZA) |
Підготував: | Мохаммед Нассір (MOAGEZA) |
Редагував: | Хасан Салех (MathModel) |
Розв'язок
Загальна ідея: Ми можемо лише збільшувати біти за допомогою операції OR. Максимальне значення, яке може досягти будь-який елемент, це побітове OR всіх елементів:
Щоб зробити всі елементи рівними, кожен з них повинен стати . Елементи, які вже дорівнюють , не потребують жодних операцій. Всім іншим елементам потрібна рівно одна операція.
Відтак, мінімальна кількість операцій дорівнює:
Розв'язок працює за час \mathcal{O}(n \log n) на тестовий випадок.
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin >> n;
map<int, int> mp;
int res = 0;
for(int i = 0; i < n; i++){
int x;
cin >> x;
mp[x]++;
res |= x;
}
cout << n - mp[res];
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t--){
solve();
cout << '\n';
}
}