比赛 20121106 评测结果 AAAAWAWW
题目名称 过河 最终得分 62
用户昵称 乔治文 运行时间 0.008 s
代码语言 Pascal 内存使用 77.42 MiB
提交时间 2012-11-06 11:59:54
显示代码纯文本
var i,j,pp,n,l,r,flag,max,ans,temp,k:longint;
    mark:array[0..1000,0..1000] of boolean;
    p,t:array[0..10000000] of longint;
    a,b,c:array[0..1000] of longint;
begin
assign(input,'rivera.in');
reset(input);
assign(output,'rivera.out');
rewrite(output);
read(n);
for i:=1 to n do
 begin
  read(a[i],b[i]);
  c[i]:=a[i]+b[i];
  if c[i]>max
   then max:=c[i];
 end;
p[1]:=0;
t[1]:=0;
l:=0;
r:=0;
flag:=0;
mark[0,0]:=true;
fillchar(mark,sizeof(mark),false);
repeat
for i:=0 to 5 do
 begin
  if p[l]+i>n
   then begin
         ans:=t[l]+1;
         flag:=1;
         break;
        end
   else begin
         temp:=t[l]+1;


         if c[p[l]+i]<>0
          then begin
                  if temp mod c[p[l]+i]=0
                   then k:=c[p[l]+i]
                   else k:=temp mod c[p[l]+i];
               end
          else k:=0;
         if (k<=a[p[l]+i])
          then begin
                inc(r);
                p[r]:=p[l]+i;
                t[r]:=t[l]+1;
                if mark[p[r],k]
                 then dec(r)
                 else mark[p[r],k]:=true;
               end;
         if l-i>0
          then begin

                if c[p[l]-i]<>0
                  then begin
                        if temp mod c[p[l]-i]=0
                         then k:=c[p[l]-i]
                         else k:=temp mod c[p[l]-i];
                       end
                  else k:=0;
                if k<=a[p[l]-i]
                 then begin
                       inc(r);
                       p[r]:=p[l]-i;
                       t[r]:=t[l]+1;
                       if mark[p[r],k]
                        then dec(r)
                        else mark[p[r],k]:=true;
                      end;
               end;

        end;
 end;
 if flag=1
  then break;
inc(l);
until l>r;
if flag=1
 then writeln(ans)
 else writeln('NO');
close(input);
close(output);
end.