奇数次的数?

题意:

给出n对数,表示有2 * n个数,只有2个数出现了奇数次,内存限制1MB,现在需要知道这两个数是什么。

题解:

首先这一道题只有两个数出现了奇数次,那么其余的数都出现了偶数次,很容易就想到了"^",满足的性质就是相同数的影响会抵消。

那么在二进制的意义下,对于第i位,记录第i位为1的所有数的异或和,那么对于这个数组只可能出现两种值,0,ans0,ans1,ans0^ans1

然后再随便找到ans0,然后再用所有数的异或和,异或一下就知道ans1了~

代码:

#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

#define LL long long
LL S[31], x, Xor, ans[2];
int n;
void add (LL x)
{
	for (int i = 30; i >= 0; -- i)
		if ((1LL << i) & x) S[i] ^= x;
}

int main ()
{
	scanf ("%d", &n);
	for (int i = 1; i <= 2 * n; ++i)
	{
		scanf ("%I64d", &x);
		Xor ^= x;
		add(x);
	}
	for (int i = 30; i >= 0; -- i)
		if (S[i] != Xor && S[i])
		{
			ans[0] = S[i];
			break;
		}
	ans[1] = Xor ^ ans[0];
	if (ans[0] > ans[1]) swap(ans[0], ans[1]);
	cout << ans[0] << " " << ans[1];
	return 0;
}

  

总结:

发现题目中的性质啊,然后缺什么就维护什么QAQ

时间: 2025-01-31 07:37:25

奇数次的数?的相关文章

趣题:寻找出现了奇数次的数

看到16级的做广工的新生赛某题,找一组数中出现了奇数次的两个数(其他数都出现偶数次),竟然不会= =. 解释在此:http://www.matrix67.com/blog/archives/511. 当然,手写hash表应该也是可以的..

一组数中,只有两个数只出现了奇数次,其他所有数都是成对出现的,请找出那两个数

先看一个简单的,一组数中,只有一个数只出现了奇次,其他所有数都是成对出现的,找出出现奇次数的数.对于这个题,我们只需对所有数及逆行异或即可.理论公式: a⊕b=b⊕a a⊕0=a a⊕b⊕b=a a⊕(b⊕c)=(a⊕b)⊕c 代码: #include <stdio.h> #include <stdlib.h> int main() { int arr[] = { 1, 2, 3, 4, 1, 2, 3 }; int ret = 0; int len = sizeof(arr) /

给你n个数,其中有且仅有一个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那一个数。

//有101个数,其中有50个数出现了两次,有一个数只出现了一次,找出出现一次的数 #include <stdio.h> #include <stdlib.h> int main() { int a[11] = {0}; int i; int n = 0; printf("please input the arr :"); for(i = 0;i < 11;i++) { scanf("%d",&a[i]); } for(i =

五边形数和两个递归式

五边形数 五边形数是对每条边上有 \(n\) 个点构成的五边形的总点数的数列的称呼. 由上图,可以得出这个数列的递归式. \[ \begin{aligned} a_1&=1 \a_n&=a_{n-1}+(3n-2) \\end{aligned} \] 解递归式得到通项公式 \[ \begin{aligned} a_n&=\sum _{i=1}^n(3i-2)=\frac{n(3n-1)}{2} \end{aligned} \] 它也能通过三个三角形数得到. 狭义的五边形数中 \(n

[CSP-S模拟测试]:平方数(数学+哈希)

题目传送门(内部题137) 输入格式 第一行,一个正整数$n$. 第二行$n$个正整数$a_1\sim a_n$. 输出格式 输出一个整数,为满足条件的二元组个数. 样例 样例输入: 51 2 3 4 12 样例输出: 2 数据范围与提示 对于$20\%$的数据,满足$n\leqslant 3,000$. 对于$50\%$的数据,满足$n\leqslant 50,000$. 对于另$20\%$的数据,满足$a_i\leqslant 1,000$. 对于$100\%$的数据,满足$1\leqsla

15. 蛤蟆的数据结构进阶十五排序实现之堆排序

15. 蛤蟆的数据结构进阶十五排序实现之堆排序 本篇名言:"谁要是游戏人生 ,他就一事无成 ; 谁不能主宰自己 ,永远是一个奴隶.--歌德" 继续来看下堆排序. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47733553 1.  堆排序 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆分为大根堆和小根堆,是完全二叉树

数位DP小结

如果以下错的地方,谢谢提出. 1.HDU - 2089 不要62 解题思路:这题的限制条件是不能出现4,和数字中不能包含62,那么就对这两个进行特判即可 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define N 12 int n, m; int dp[N][N]; int data[N]; //zero_flag是前导零的标记,为0时表示有前导0 //bor

二分题目总结

在UVA上搜索二分时搜到了一个很好的public专题 1.POJ - 3258 River Hopscotch http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16277 解题思路:http://blog.csdn.net/l123012013048/article/details/45646911 这题是符合条件的情况下,解有可能是偏小的 2.POJ - 3273 Monthly Expense http://acm.hu

【组合数学】 05 - 经典计数方法

1. 基本计数的母函数 现在来用母函数来求解基本计数问题,母函数既可以完成自动计数,还能表示计数本身,像Stirling数这种就只能用母函数表示.自动计数适用于可以分步的计数问题,并且目标值是每步值之和,这与多项式的运算性质有关. 1.1 组合数和分划数 直观上最符合这一特点的就是模型2,从\(n\)个可区别对象中选出\(m个\).限制第\(k\)个对象被取的次数在集合\(M_k\)中,它被选情况的母函数是\(\sum\limits_{i\in M_k}x^i\),所有元素被选择的情况可以借助母