Problem Müəllifi: | Məhəmməd Nasser (MOAGEZA) |
Hazırlayan: | Məhəmməd Nasser (MOAGEZA) |
Redaktə edən: | Hasan Saleh (MathModel) |
Həll
Ümumi Fikir: Biz yalnız OR əməliyyatından istifadə edərək bitləri artıra bilərik. Hər hansı bir elementin çata biləcəyi maksimum dəyər bütün elementlərin bitwise OR-u olmalıdır:
Bütün elementləri bərabər etmək üçün hər biri olmalıdır. Artıq olan elementlər heç bir əməliyyata ehtiyac duymur. Digər bütün elementlər isə məhz bir əməliyyata ehtiyac duyur.
Beləliklə, minimum əməliyyat sayı belədir:
Bu həll hər test üçün \mathcal{O}(n \log n) zaman çəkir.
#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';
}
}