1. 程式人生 > >【51nod-1315】合法整數集(數位)

【51nod-1315】合法整數集(數位)

turn size nbsp include main ace amp 數位 color

技術分享圖片

【思路】

既然是or操作,將數轉化為二進制,數位是1,對應的數組元素+1,再將x轉為成二進制,只要查找X為1的位置,將之前存放的數組數字找個最小的輸出就可以了。

但是並不是所有的數都要參與or,因為有些數的位數>X,顯然這些數是不用刪除的,所以不用讓這些數加到數組裏。還有哪些數呢?當有些數的位數是1,而X對應的位數是0,這些數也是一定不用刪除的。綜合以上只要滿足(x|xx)> x就可以參與or。

【code】

#include <bits/stdc++.h>
using namespace std;
int a[35];
int main()
{
    
int n, m, x, c = 0, ans = 1e9; cin>>n>>m; for(int i=0; i<n; i++) { scanf("%d", &x); if((x|m) > m) continue;// c = 0; while(x) { c++; if(x & 1) a[c]++; x >>= 1; } } c
= 0; while(m) { c++; if(m & 1) ans = min(ans, a[c]); m >>= 1; } printf("%d\n", ans); return 0; }

【51nod-1315】合法整數集(數位)