- 写在前面:学学stl,刷刷水题,练练vector
- 题目描述 Description
小明才会学数数,妈妈就开始难为他了。告诉他N(N<=1000000)个数字,问他哪一个数字出现的次数为奇数(保证N为奇数,数据中每个数字出现的次数只有一个为奇数次,每个数字为int范围内)
- 输入描述 Input Description
第一行一个N;第i+1行为第i个数字
- 输出描述 Output Description
输出仅仅一行,为出现奇数次的那个数字
- 样例输入 Sample Input
5
3
6
7
6
3
- 样例输出 Sample Output
7
- 数据范围及提示 Data Size & Hint
时间限制: 1 s
空间限制: 32000 KB
- 题解
不知道为什么分到了数论里,一个哈希表貌似就可以搞定了。每读入一个数,从哈希里找:找到了就从哈希里删掉,找不到就插入。最后扫一遍哈希,哪个size不是0,就输出哪个里存的数。
- Code
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int m = 299993;
int n;
vector <int> hash[300000];
void ins(int p)
{
int k = p % m;
vector <int> :: iterator i;
bool b = false;
for(i = hash[k].begin(); i != hash[k].end(); i++) if((*i) == p)
{
b = true; break;
}
if(b) hash[k].erase(i);
else hash[k].push_back(p);
}
int main()
{
int x;
scanf("%d", &n);
while(n--)
{
scanf("%d", &x);
ins(x);
}
for(int i = 0; i < m; ++i) if(hash[i].size() != 0)
{
printf("%d", hash[i][0]);
break;
}
return 0;
}
时间: 2024-10-13 23:29:28