【問題描述】有乙個整數序列 a1,a2,…,an. 請找到乙個集合的乙個最長子集s,使得對於∀i,j ∈ s, ai ⊕aj < min(ai,aj) ,其中 ⊕ 表示按位異或運算.
【輸入形式】需要輸入兩行,第一行輸入乙個數 n (1 ≤ n ≤ 105), 表示數列a1,a2,…,an的長度。第二行輸入 n 個整數: a1,a2,…,an (1 ≤ ai ≤ 109).
【輸出形式】輸出集合s的最大長度
【樣例輸入1】
3
1 2 3
【樣例輸出1】 2
【樣例輸入2】
5
1 1 1 1 1
【樣例輸出2】 5
【樣例1說明】1 2 3 中2和3的異或結果等於1,既小於2又小於3
【提示】如果兩個數的異或結果小於這兩個數中的任何數,那麼這兩個數應該滿足什麼條件?從最高位出發。
該題改編自原藍橋杯題目,對於初學者來說據有一定的難度,特別是位運算對於會給初學者帶來一定的不適。
題目本意為輸入數列個數,和數列內容,找到符合條件的子集。
以下是同學寫出的程式
#include
#include
int min (
int a,
int b)
intmain()
}if(j==i)
break;}
printf
("%d"
,max)
;return0;
}
以下是參考**
#include
#include
intmain()
,n,i;
unsigned x;
scanf
("%d"
,&n)
;int max =0;
for(i =
1;i <= n;i++)}
printf
("%d\n"
,max)
;return0;
}
leetcode 子集 dfs,位運算
給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 class solution vectorint subsets vector int nums 先上 cl...
利用位運算求子集
紫書第189頁 給你乙個集合,讓你求集合的所有子集 我們都知道長為n的集合子集個數為 2 n 個 包含了空集 一般都是遞迴求子集,沒想到還可以運用位運算求 具體思路就不展開了,總的來說就是每個元素在子集裡都有兩種情況 取或不取 可以用0和1來代表,這就跟位運算的性質所吻合 include defin...
leetcode 78 子集(位運算求子集)
給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 分析 含有n個元素的集合共有 1 一位後與 1的方式判斷最後一位是0還是1,如果是1,就把對應位置的數加入到...