我有一個數組有10^5個元素,其中每個元素都在[0,1023]。 我必須找到一個數組的子集的數量,使得元素的XOR是Q.(對於Q> 1023,答案是0)。 我想出了這個O(N * 1024)方法找到一個給定的異或子集的數量
for (int i = 1; i <= n; i++)
{
int a = F[i];
for (int j = 0; j < 1024; j++)
{
ways[i][j] = ways[i-1][j] + ways[i-1][j^a];
if (ways[i][j] >= mod)
ways[i][j] -= mod;
}
}
由於元件在範圍高達1023,可我維持的Frequency F[i] ,
陣列減少上述代碼高達O(1024 * 1024) 。 這是可能的,頻率數組可能會有用嗎?
子集必須是一定的大小?它們是由陣列中的相鄰元素製成的嗎? – m69
所以你有'F'這是一個0到1,023之間的隨機數組。你有'Q'這是一個在同一範圍內的隨機數。你想知道插入'F [x]^F [y]'的多少個不同的x,y組合可以等於'Q'?例如:如果'F = [0,1,1,2,2,2,3,3,3,3]'和'Q = 3',那麼'ways'應該是10? (1 * 4 + 2 * 3) – dtudury
@ m69子集可以是任意大小'2^n'子集可能 – Sunny