[bzoj]2761: [JLOI2011]不重复数字

原题链接:不重复数字

去重???输出第一个???
直接set不就好啦。。
bzoj里面用set就能过。。不过洛谷里面的只能70分。
正解hash表。秒杀。。

#include <bits/stdc++.h>
using namespace std;
int head[133331],next[1926817+1],val[1926817+1],n,tmp,tot=0;
bool inst(int x);
void work();
int main()
{
	int Case;
	scanf("%d",&Case);
	while(Case--){
		work();
	}
	return 0;
}
void work(){
	memset(head,0,sizeof(head));
	memset(next,0,sizeof(next));
	memset(val,0,sizeof(val));
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&tmp);
		if(inst(tmp)){
			printf("%d ",tmp);
		}
	}
	printf("\n");
}
bool inst(int x){
	int t=x%133331;
	for(int i=head[t];i;i=next[i])
		if(val[i]==x)
			return false;
	val[++tot]=x;
	next[tot]=head[x];
	head[x]=tot;
	return true;
}
posted @ 2018-10-27 00:57  _onglu  阅读(135)  评论(0编辑  收藏  举报