zoukankan      html  css  js  c++  java
  • BZOJ 2761: [JLOI2011]不重复数字 hash哈希

    题目就不贴了

    点我看题

    题意:这题题意很简明,就是给一个序列,把序列里相同的删掉,然后输出,按原数列顺序。

    思路:这题之前QZZ和ZN大神犇叫我去做,辣时还不会hash,就留着了。最近某夏令营学会了hash就回来写。

              就是很简单的hash裸题。

              我的hash就是把数字的每一位加起来然后累乘再膜。

              从夏令营中涨了姿势,hash可以选择不判重,然后直接通过多hash的方法减少碰撞概率。

             QAQ...刚开始以为3hash就够了,最后5hash才水过去。QAQ注意输出格式,行末没空格。

      1 const
      2    base1=23333;
      3    base2=66666;
      4    base3=23366;
      5    base4=66233;
      6    base5=12345;
      7    QZZ=182029; //膜神犇RP++
      8    HR=199999;//膜神犇RP++
      9    TJM=172709;//膜神犇RP++
     10    ZN=198719;//膜神犇RP++
     11    HJW=198953;//膜神犇RP++
     12 var n:longint;
     13     s:string;
     14     num:longint;
     15     a:array[0..50000]of longint;
     16     i,j,x,y,k:longint;
     17     hash1,hash2,hash3,hash4,hash5:int64;
     18     v1,v2,v3,v4,v5:array[0..1,0..200000]of boolean;
     19     bool:integer;
     20     t,qaq:longint;
     21 begin
     22   read(t);
     23   for qaq:=1 to t do
     24   begin
     25     read(n);
     26     for i:=0 to 1 do
     27     for j:=0 to 200000 do
     28     begin
     29       v1[i,j]:=false;
     30       v2[i,j]:=false;
     31       v3[i,j]:=false;
     32       v4[i,j]:=false;
     33       v5[i,j]:=false;
     34     end;
     35     num:=0;
     36     for i:=1 to n do
     37     begin
     38       read(x);
     39       if x>=0 then bool:=0 else
     40       begin
     41         bool:=1;
     42         x:=-x;
     43       end;
     44       str(x,s);
     45       if bool=1 then x:=-x;
     46       hash1:=1;
     47       hash2:=1;
     48       hash3:=1;
     49       hash4:=1;
     50       hash5:=1;
     51       for j:=1 to length(s) do
     52       begin
     53         hash1:=(hash1*base1+ord(s[j])) mod QZZ;
     54         hash2:=(hash2*base2+ord(s[j])) mod HR;
     55         hash3:=(hash3*base3+ord(s[j])) mod TJM;
     56         hash4:=(hash4*base4+ord(s[j])) mod ZN;
     57         hash5:=(hash5*base5+ord(s[j])) mod HJW;
     58       end;
     59       if (not v1[bool][hash1]) then
     60       begin
     61         v1[bool][hash1]:=true;
     62         v2[bool][hash2]:=true;
     63         v3[bool][hash3]:=true;
     64         v4[bool][hash4]:=true;
     65         v5[bool][hash5]:=true;
     66         inc(num);
     67         a[num]:=x;
     68       end else
     69       if (not v2[bool][hash2]) then
     70       begin
     71         v2[bool][hash2]:=true;
     72         v3[bool][hash3]:=true;
     73         v4[bool][hash4]:=true;
     74         v5[bool][hash5]:=true;
     75         inc(num);
     76         a[num]:=x;
     77       end else
     78       if (not v3[bool][hash3]) then
     79       begin
     80         v3[bool][hash3]:=true;
     81         v4[bool][hash4]:=true;
     82         v5[bool][hash5]:=true;
     83         inc(num);
     84         a[num]:=x;
     85       end else
     86       if (not v4[bool][hash4]) then
     87       begin
     88         v4[bool][hash4]:=true;
     89         v5[bool][hash5]:=true;
     90         inc(num);
     91         a[num]:=x;
     92       end else
     93       if (not v5[bool][hash5]) then
     94       begin
     95         v5[bool][hash5]:=true;
     96         inc(num);
     97         a[num]:=x;
     98       end;
     99     end;
    100     for i:=1 to num-1 do
    101     write(a[i],' ');
    102     writeln(a[num]);
    103   end;
    104 end.
    hash
  • 相关阅读:
    1104--DNA排序
    poj1050-To the Max
    编译:一个 C 程序的艺术之旅(转载)
    大话同步/异步、阻塞/非阻塞(转载)
    Windows 在 git bash下使用 conda 命令
    Python Multiprocessing 多进程,使用多核CPU计算 并使用tqdm显示进度条
    Python 写入训练日志文件并控制台输出
    nn.Conv2d 参数及输入输出详解
    Python中 list, numpy.array, torch.Tensor 格式相互转化
    Linux 上传代码到github
  • 原文地址:https://www.cnblogs.com/Bunnycxk/p/7308959.html
Copyright © 2011-2022 走看看