子陣列異或和為0的最多劃分
給定乙個整型陣列arr,其中可能有正有負有零。你可以隨意把整個陣列切成若干個不相容的子陣列,求異或和為0的子陣列最多可能有多少個?整數異或和定義:把陣列中所有的數異或起來得到的值。
輸入描述:
輸出包括兩行,第一行乙個整數,代表陣列長度n(1≤
n≤10
6)
(1 \leq n \leq 10^6)
(1≤n≤1
06)。第二行有n個整數,代表陣列arr(−1
e9≤a
rri≤
1e9)
\left(-1e9 \leq arr_i \leq 1e9 \right)
(−1e9≤
arri
≤1e
9)。輸出描述:
輸出乙個整數,表示陣列切割最多的子陣列的個數。
示例1輸入
輸出10
3 2 1 9 0 7 0 2 1 3
4
說明最優劃分:,,,,, 其中,,,的異或和為0
備註:
時間複雜度o(n
)o(n)
o(n)
,空間複雜度o(n
)o(n)
o(n)
。題解:
動態規劃,設 f[i] 表示在 a[0…i] 上作分割,異或和為0的子陣列數量。假設在 a[0…i] 上存在最優分割,並且最後乙個分割陣列一定包含 a[i] ,那麼這個最優分割的最後乙個子陣列只可能有以下兩種情況:
**:
#include
#include
#include
using
namespace std;
intmain
(void
) _hash[ans]
= i;
if( i ) f[i]
=max
( f[i]
, f[i -1]
);if( f[i]
> ret ) ret = f[i];}
return0*
printf
("%d\n"
, ret)
;}
(演算法)和為0的最大連續子陣列
和為零的最大連續子陣列 我首先想到的是字首陣列和,遍歷一遍陣列,計算出sum i 表示從0 i的子陣列之和 有了字首陣列和,只要sum i sum j i需要注意的是 當sum i 等於0時,其區間為 0,i 在判斷sum i sum j i include include include usin...
LA2965侏羅紀(異或和為0的最大數字個數)
題意 給你n個字串,讓你在裡面找到乙個字串集合使得這些字串中所有的字母出現的次數和為偶數,輸出集合的最大個數,和ascii最小的解。思路 考慮到每個字串中所有的字元都是有大寫字母組成的,我們可以把每個字串都用乙個26位長的二進位制數表示,比如第一位表示a,那麼當第一位為0的時候就是說明a出現了偶數次...
和為k的子陣列
給定乙個整數陣列和乙個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。示例 1 輸入 nums 1,1,1 k 2 輸出 2 1,1 與 1,1 為兩種不同的情況。說明 陣列的長度為 1,20,000 陣列中元素的範圍是 1000,1000 且整數 k 的範圍是 1e7,1e7 o n ...