1779: 无法言表
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 340 Solved: 130
[Submit][Status][Web Board]
Description
给出N个数,要求把其中的重复的去掉,只保留第一次出现的数.1 <= N <= 50000,给出的数在32位有符号整数范围内。
Input
第一行T(T<=10),接下来一个数n,接下来n个数
Output
Case #x: y1,y2,…,x是测试编号从1开始,y_i表示答案
Sample Input
2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6
Sample Output
Case #1: 1 2 18 3 19 6 5 4
Case #2: 1 2 3 4 5 6
HINT
Source
//一看N会比较大,直接用数组肯定不行(而且可能是负数),所以我直接就往map上想了~,先进先出就考虑用队列存数据。
ac_code:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,k = 0;
scanf("%d",&t);
while(t--)
{
int n,x;
map<int,int>s;
queue<int>q;
scanf("%d",&n);
k++;
for(int i = 0; i < n; i++)
{
scanf("%d",&x);
if(!s[x])
{
s[x] = x;
q.push(x);
}
}
printf("Case #%d: %d",k,q.front());
q.pop();
while(!q.empty())
{
printf(" %d",q.front());
q.pop();
}
printf("\n");
}
return 0;
}
/*
总结:
数据大考虑map计数~
先进先出可以考虑用队列存数据。
“万能头文件”不要写成了~~#include <bits\stdc++.h>~~
自己编译器编译没有问题,oj上编译会出错
正确的:#include <bits/stdc++.h> //(中间斜杠向左)
*/