首页 > 代码库 > bzoj2761: [JLOI2011]不重复数字(hash)
bzoj2761: [JLOI2011]不重复数字(hash)
题目大意:给出N个数,要求把其中重复的去掉,只保留第一次出现的数。例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4。
随意哈希一下。。。【我不会什么set啊treap啊之类QAQ
代码如下:
var t,n,i,x:longint; v:array[0..500009]of boolean; vv,b,a,ans:array[0..500009]of int64; function hash(x:int64):longint; var xx:longint; begin xx:=((x mod 500009)+500009)mod 500009; while (b[xx]<>x)and(b[xx]<>0) do xx:=(xx+1)mod 500009; b[xx]:=x; exit(xx); end; begin readln(t); while t>0 do begin dec(t); readln(n); fillchar(b,sizeof(b),0); fillchar(v,sizeof(v),false); for i:=1 to n do begin vv[i]:=-1; read(a[i]); x:=hash(a[i]); if not v[x] then begin v[x]:=true; vv[i]:=x; end; end; ans[0]:=0; for i:=1 to n do begin if vv[i]<>-1 then begin inc(ans[0]); ans[ans[0]]:=b[vv[i]]; end; end; for i:=1 to ans[0]-1 do write(ans[i],‘ ‘); writeln(ans[ans[0]]); end; end.
bzoj2761: [JLOI2011]不重复数字(hash)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。