关闭

BZOJ 2761: [JLOI2011]不重复数字(傻逼题)

256人阅读 评论(0) 收藏 举报
分类:

2761: [JLOI2011]不重复数字

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 2885  Solved: 1064
[Submit][Status][Discuss]

Description

给出N个数,要求把其中重复的去掉,只保留第一次出现的数。
例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4。
 

Input

输入第一行为正整数T,表示有T组数据。
接下来每组数据包括两行,第一行为正整数N,表示有N个数。第二行为要去重的N个正整数。
 

Output

 
对于每组数据,输出一行,为去重后剩下的数字,数字之间用一个空格隔开。

Sample Input

2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6

Sample Output

1 2 18 3 19 6 5 4
1 2 3 4 5 6

HINT

对于30%的数据,1 <= N <= 100,给出的数不大于100,均为非负整数;


对于50%的数据,1 <= N <= 10000,给出的数不大于10000,均为非负整数;


对于100%的数据,1 <= N <= 50000,给出的数在32位有符号整数范围内。


提示:


由于数据量很大,使用C++的同学请使用scanf和printf来进行输入输出操作,以免浪费不必要的时间。


解题思路:

map

/**************************************************************
    Problem: 2761
    User: mogu
    Language: C++
    Result: Accepted
    Time:920 ms
    Memory:1672 kb
****************************************************************/
 
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <map>
#include <vector>
#define ll long long 
using namespace std;
const int MAXN = 50000 + 10;
int read()
{
    int x = 0, f = 1; char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == '-') f *= -1; ch = getchar();}
    while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0'; ch = getchar();}
    return x * f;
}
map<int, int> st;
int N, x;
int main()
{
    int T = read();
    while(T--)
    {
        N = read();st.clear();bool flag = true;
        for(int i=0;i<N;i++)
        {
            x = read();
            if(st[x] == 0)
            {
                if(!flag) printf(" ");
                printf("%d", x);
                flag = false;
            }
            st[x] = 1;
        }
        printf("\n");
    }
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:99038次
    • 积分:3642
    • 等级:
    • 排名:第8942名
    • 原创:275篇
    • 转载:8篇
    • 译文:0篇
    • 评论:8条
    最新评论