最后一题

原创 2015年07月10日 09:46:54

program problem_f;
type
 int=longint;
const
 inf='f.in';
 outf='f.out';
 mapxy1=5;
 maxn=mapxy1*mapxy1;
 maxrinhp=16;
 maxt=34;
 dx:array[0..3] of int=(-1,0,1,0);
 dy:array[0..3] of int=(0,-1,0,1);
 dn:array[0..4] of int=(-1,-mapxy1,1,mapxy1,0);
var
 bh:array[0..maxt,0..maxn-1,0..maxn-1,0..maxn-1,1..maxrinhp] of int;
 g:array[0..maxn-1,0..maxn-1] of int;
 map:array[-1..mapxy1,-1..mapxy1] of boolean;
 rp,zp1,zp2,hpm,hpz:int;

function getposid(x,y:int):int;
begin
 if (x<0) or (x>=mapxy1) or (y<0) or (y>=mapxy1)
  then  getposid:=1
  else getposid:=y*mapxy1+x;
end;

procedure floyd;
var
 i,j,k:int;
begin
 fillchar(g,sizeof(g),$3f);
 for i:=0 to mapxy1-1 do
  for j:=0 to mapxy1-1 do
   if map[i,j] then
    for k:= 0 to 3 do
     if map[i+dy[k],j+dx[k]] then
      g[getposid(j,i),getposid(j,dx[k])]:=1;
 for i:= 0 to maxn-1 do
  g[i,i]:=0;
 for k:=0 to maxn-1 do
  for i:=0 to maxn-1 do
   for j:=0 to maxn-1 do
    if g[i,j]>g[i,k]+g[k,j] then
     g[i,j]:=g[i,k]+g[k,j];
end;

var i,j,k:int;
 c:char;
 ri,zi1,zi2,hpmi,t:int;
 rj,zj1,zj2,hpmj,b:int;

function lingmove(d:int):int;
var
 i,d1:int;
begin
 for i:=0 to 3 do
  begin
   d1:=d+dn[i];
    if (d1>=0) and (d1<maxn) then
     if g[d,d1]=1 then
      if g[d,d1]+g[d1,rj]=g[d,rj] then
       begin
        lingmove:=d1;
        exit;
       end;
  end;
  lingmove:=d;
end;

begin
 fillchar(map,sizeof(map),0);
 //assign(input,inf);
// reset(input);
 for i:=0 to mapxy1-1 do
  begin
 for j:=0 to mapxy1-1 do
 begin
  read(c);
  map[i,j]:=(c<>'1');
  if c='M' then rp:=getposid(j,i);
  if c='z' then zp1:=getposid(j,i);
  if c='Z' then zp2:=getposid(j,i);
 end;
 readln;
end;
readln(hpm,hpz);
//close(input);
floyd;
fillchar(bh,sizeof(bh),$3f);
bh[0,rp,zp1,zp2,hpm]:=hpz*2;
bh[0,rp,zp2,zp1,hpm]:=hpz*2;
for t:=0 to maxt do
 for ri:=0 to maxn-1 do
  for zi1:=0 to maxn-1 do
   for zi2:=0 to maxn-1 do
    for hpmi:=1 to hpm do
     if bh[t,ri,zi1,zi2,hpmi]<$3f3f3f3f then
     begin
      b:=bh[t,ri,zi1,zi2,hpmi];
      if b<=0 then
       begin
        //assign(output,outf);
        //rewrite(output);
        writeln('WIN');
        writeln(t);
        //close(output);
        halt;
       end;
if t<maxt then
for k:=0 to 4 do

begin
 rj:=ri+dn[k];
 if (rj<0) or (rj>=maxn) then continue;
 if b>hpz then
   if rj=zi1 then continue;
 if b>0 then
   if rj=zi2 then continue;
 if g[ri,rj]>1 then continue;
 hpmj:=hpmi;
 if k=4 then
  dec(b);
 if b<=hpz then zj1:=zi1 else
  begin
   zj1:=lingmove(zi1);
   if zj1=rj then begin dec(hpmj);
                        zj1:=zi1;
                  end;
  end;
  if b<=0 then zj2:=zi2 else
   begin
    zj2:=lingmove(zi2);
    if zj2=rj then begin dec(hpmj); zj2:=zi2; end;
   end;

   if hpmj=hpmj-2 then
    if zj1=zj2 then
     inc(hpmj);

   if hpmj>0 then
    if bh[t+1,rj,zj1,zj2,hpmj]>b then
     bh[t+1,rj,zj1,zj2,hpmj]:=b;
    end;
   end;
  //assign(output,outf);
  //rewrite(output);
  writeln('LOSE');
  //close(output);
end.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

华为杯编程比赛最后一题题目附上自己的解题代码

题目: 超哥来到一间密室,忽然一阵阴风把门关上了。魔法学校的门需要魔力才能打开,而超哥没有那间密室的魔力。超哥继续往密室深处走,发现一堆魔法瓶和一些古老的文字。上面写着:欲开启密室,需收集所有瓶...

Poj 3255 Roadblocks【次短路】【大一最后一题】

Roadblocks Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: ...

华为2012校招成都站8:00最后一题,表达式计算源代码

主要是数字可能是多位数,需要处理!本程序没有做异常处理,要求表达式串正确! 其中有两个内部循环代码是重复的,最好写成一个函数,这里就不改了 转载 请保留链接 http://blog.csdn....

1008_《阿里巴巴集团杯》ACM华工赛点网络赛最后一题

优先队列 插入删除查找

波兰式转为逆波兰式——2016年华为笔试最后一题

题目 2016年9月6日华为笔试最后一道题(300分)为波兰式转化为逆波兰式的问题,具体题目为: 描述:   波兰表示法,是一种逻辑、算术和代数表示方法,其特点是操作符置于操作数的前面,因此也称...

hdu 4361 2013多校联合训练第3场最后一题

题目有n个点  初始时先加入一个点到集合中,然后依次加入点,直到集合中的点的个数为n为止,每加一个点,算一次集合内所有点之间的最短距离,输出这个距离;为了避免输出过多,把每次要输出的结果相加后,每组只...

网易前端实习生笔试最后一题ajax实现文件上传带进度条

来源:点击打开链接 用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,...

2015年上半年软考最后一题设计模式回忆

其他的内容也不多说了,就上代码吧,对于VISITOR模式的理解考试的时候也是才看的,回来敲了一下程序感觉是可行的。 这里名字可能和考试的时候不一样,因为是自己回忆着写的,但大体模式是这样的,大家看看...

USACO 第二章最后一题,呵呵

最短路径的求法。。。

【笔试】56、金山笔试最后一题,数据统计

国庆之前参加了金山的笔试,但是做到最后一题没有做完,并且当时下雨思路有点乱,没有做出来,这里补上,其实倒数第二题思路没问题,但是回来检查的时候,发现疏忽了一个地方,暂且不提,这个题应该有多种解法,这里...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)