码迷,mamicode.com
首页 > 其他好文 > 详细

Codevs2605题解

时间:2015-05-07 18:58:06      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:vector   哈希表   

  • 写在前面:学学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;
}

Codevs2605题解

标签:vector   哈希表   

原文地址:http://blog.csdn.net/t14t41t/article/details/45563205

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!