jzoj P4309 刷题计划___枚举+哈希

206 篇文章 0 订阅
14 篇文章 0 订阅

题目大意:

这里写图片描述
这里写图片描述

题解:

这题就是一个暴力的枚举然后用哈希去存题目,观察数据可知m≤10^2,
所以直接O(m^2)枚举每个命令然后把题目存入哈希表中查询即可。
不过要注意对于一个已经A掉的题目他可能WA了,不过还是要算它是AC的,并不用在查询时输出!

代码:

const
    modn=107;
var
    b,hash:array [0..modn+1] of longint;
    c,a:array [0..101] of longint;
    x,y,i,j,k,l,n,m:longint;

function rp(xy:longint):longint;
var
    i:longint;
begin
     i:=xy mod modn;
     while (hash[i]<>xy) and (hash[i]<>0) do
       begin
             inc(i);
             if i>modn then i:=0;
       end;
     hash[i]:=xy;
     exit(i);
end;

begin
    assign(input,'problem.in'); reset(input);
    assign(output,'problem.out');rewrite(output);
    readln(n,m);
    for i:=1 to m do
       begin
            read(x);
            if x=1 then begin
                            read(y);
                            inc(c[0]);
                            c[c[0]]:=y;
                            for j:=1 to k do
                              if a[j]=y then a[j]:=-1;
                        end
                   else if x=2 then
                        begin
                             read(y);
                             l:=0;
                             for j:=1 to c[0] do
                               if c[j]=y then l:=1;
                             if l=0 then
                             begin
                                 inc(k);
                                 a[k]:=y;
                             end; 
                        end
                   else if x=3 then
                        begin
                           l:=0;
                           for j:=k downto 1 do
                              if a[j]<>-1 then
                              begin
                                  y:=rp(a[j]);
                                  if b[y]<>i then
                                  begin
                                       inc(l);
                                       write(a[j],' ');
                                  end;
                                  b[y]:=i;
                                  if l=20 then break;
                              end;
                           writeln;
                        end;
       end;
       close(input);close(output);
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值