[洛谷]P4305 [JLOI2011]不重复数字
程序员文章站
2024-03-16 22:52:04
...
题目大意
给出N个数,去重
题目解析
可以用Hash或Map,这里介绍Hash方法
Hash用来处理一个元素是否在一个集合内
当输入的数x不哈希表里则输出并加入哈希表,即可
(这题会卡 cin/cout)
代码
#include<bits/stdc++.h>
#define p 100007//质数
#define h(x) x%p
using namespace std;
int T,n,x;
int a[p];
int loc(int x)
{
int k=h(abs(x)),i=0;
while(a[(k+i)%p]!=0&&a[(k+i)%p]!=x)
i++;
return (k+i)%p;
}//查找关键字在哈希表的位置
int main()
{
scanf("%d",&T);
while(T>0)
{
memset(a,0,sizeof(a));
T--;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
int t=loc(x);
if(a[t]!=x)
{
a[t]=x;//放入哈希表里
cout<<x<<" ";//输出
}
}
cout<<endl;
}
}
上一篇: 【五子棋-简易AI】