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

相关推荐

03-28 19:11
铜陵学院 C++
有礼貌的山羊追赶太阳:太典了,连笔试都没有开始就因为HC满了而结束了,而且还卡你不让你再投其他部门的。
点赞 评论 收藏
分享
被加薪的哈里很优秀:应该继续招人,不会给你留岗位的
点赞 评论 收藏
分享
04-30 15:51
已编辑
上海交通大学 机械工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务