n个数字中最多有多少不重叠的非空区间

来源:互联网 发布:桌面整洁 知乎 编辑:程序博客网 时间:2024/06/05 17:58

问题
给出n个数字a_1,…,a_n,最多有多少不重叠的非空区间,使得每个区间内数字 xor都等于0。即找出最大的k,使得存在k个区间(l[i],r[i]),满足1<=l[i]<=r[i]<=n(1<=i<=k),r[i]

#include <iostream>#include<vector>#include<algorithm>using namespace std;int main(){    int count;    while (cin >> count)    {        vector<int> arr;        for (int i = 0; i < count; i++)        {            int data;            cin >> data;            arr.push_back(data);//把输入的数放到数组。        }        int start = 0;        int sum=0;        for (int i = 0; i < count; i++)//整个数组遍历之后,算法就结束了。        {            if (arr[i] == 0)            {                sum++;                start = i + 1;//如果碰到一个数为0,直接计数加1,并舍弃之前的数。                continue;            }            for (int j = start; j < i; j++)//将这个小区间内的所有数字依次异或            {                int flag = 0;                for (int k = j; k <= i; k++)                {                    flag ^= arr[k];                }                if (flag == 0)                {                    sum++;                    start = i + 1;//需要将K之前的数剔除出去,继续寻找下个区间异或为0的。此时K=i.                    continue;                }            }        }        cout << sum << endl;    }    return 0;}
阅读全文
0 1