欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[洛谷]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】

下一篇: