20170910滴滴第一题xor

/*
思路
5^7 = 2,5^7^3^2^1=2 -> 2^(3^2^1)=2 -> 3^2^1 = 0
也就是说,如果异或的结果在之前出现过,
那么这个数之前连续未知个数的几个数的异或为0,
我们只需要知道有异或为0就行,具体那几个数就不用知道了
每次发现一个0就清空记录一次
*/
#include<iostream>
#include<set>
using namespace std;
int main()
{
	int num;
	while (cin >> num)
	{
		int temp = 0, c, pcount = 0;
		set<int> s;
		s.insert(0);
		for (int i = 0; i < num; i++)
		{
			cin >> c;
			temp ^= c;
			//判断是否之前出现过
			if (s.count(temp) == 1)
			{
				s.clear();
				pcount++;
				temp = 0;
			}
			s.insert(temp);
		}
		cout << pcount << endl;
	}
}

#滴滴#
全部评论
大神>o<
点赞 回复 分享
发布于 2017-09-11 22:29
看别人的题目,自己写写试试,不知道对不对……
点赞 回复 分享
发布于 2017-09-11 13:11

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务