P1825 玉公尺田迷宮

2021-09-03 07:01:19 字數 2578 閱讀 7819

有了上次題目看錯的教訓後再不敢隨便看題了usaco太坑,這題絕對不水,傳送門還特別玄學自然**短不了…

**:

const z:array[1..4,1..2]of -1..1=((1,0),(0,1),(-1,0),(0,-1));

var i,j,k:longint;

m,n:longint;

pdx,pdy:longint;

csmx,csmy:array['a'..'z',0..1]of longint;

a,boo:array[-1..1000,-1..1000]of boolean;

b:array[-1..1000,0..1000]of longint;

h,t:longint;

ch:char;

fx,fy,lx,ly:longint;

x,y,u,p:array[0..4000000]of longint;//開大一點

begin

readln(m,n);

for i:=1 to m do

begin

for j:=1 to n do

begin

read(ch);

if ch='@' then

begin

fx:=i;

fy:=j;

a[i,j]:=false;

end;

if ch='=' then

begin

lx:=i;

ly:=j;

a[i,j]:=true;

end;

if ch='#' then

begin

a[i,j]:=false;

end;

if ch='.' then

begin

a[i,j]:=true;

end;

if ch in ['a'..'z'] then//判斷傳送門

begin

a[i,j]:=true;

if csmx[ch,0]<>0 then//如果還沒有找到同字母的傳送門

begin

csmx[ch,1]:=i;

csmy[ch,1]:=j;

b[i,j]:=ord(ch)*10;

endelse//找到過了

begin

csmx[ch,0]:=i;

csmy[ch,0]:=j;

b[i,j]:=ord(ch)*10+1;

end;

endelse

b[i,j]:=0;

end;

readln;

end;

h:=1;

t:=1;

u[1]:=0;

x[1]:=fx;

y[1]:=fy;

repeat

if (x[t]=lx) and (y[t]=ly) then

begin

writeln(u[t]);

exit;

end;

if (b[x[t],y[t]]<>0) and (p[t]=0) then//因為有傳送門必須走,所以直接修改尾巴上的值

if (a[csmx[chr(b[x[t],y[t]] div 10),b[x[t],y[t]] mod 10],

csmy[chr(b[x[t],y[t]] div 10),b[x[t],y[t]] mod 10]]) then//感覺有點眼酸...

begin

pdx:=csmx[chr(b[x[t],y[t]] div 10),b[x[t],y[t]] mod 10];//記錄

pdy:=csmy[chr(b[x[t],y[t]] div 10),b[x[t],y[t]] mod 10];

x[t]:=pdx;

y[t]:=pdy;

p[t]:=1;

end;

if (b[x[t],y[t]]=0) or (p[t]=1) then//接下來就很簡單了

for i:=1 to 4 do

if a[x[t]+z[i,1],y[t]+z[i,2]] then

begin

inc(h);

x[h]:=x[t]+z[i,1];

y[h]:=y[t]+z[i,2];

p[h]:=0;

u[h]:=u[t]+1;

if b[x[h],y[h]]=0 then//有傳送門不可以賦為false,因為可能這只是乙個中轉站

a[x[h],y[h]]:=false;

end;

inc(t);

until t>h;

end.

如果不理解

有傳送門不可以賦為false,因為可能這只是乙個中轉站

則舉乙個例子

###=###

#.....#

###a###

#.....#

#@#####

###a..#

#######

a,a一對傳送門。

要先進入a從a出來,再進人a從a出來,不然不可以到終點,a就是乙個中轉站。

USACO 玉公尺田迷宮 Corn Maze

移步到新blog檢視 此blog已廢棄,已失效 這題是乙個大坑。首先我們想到了bfs,這個題就是乙個簡單到不能再簡單的maze加上傳送門就是了。但是有一點是傳送門不費時啊!什麼鬼。所以我們要先判傳送門 為什麼呢?我記得有一組測試資料報括了這種情況 這不清真 另外,好像還有乙個點是全都是傳送門的情況。...

P1879 玉公尺田Corn Fields題解

農場主john新買了一塊長方形的新牧場,這塊牧場被劃分成m行n列 1 m 12 1 n 12 每一格都是一塊正方形的土地。john打算在牧場上的某幾格里種上美味的草,供他的奶牛們享用。遺憾的是,有些土地相當貧瘠,不能用來種草。並且,奶牛們喜歡獨佔一塊草地的感覺,於是john不會選擇兩塊相鄰的土地,也...

方伯伯的玉公尺田

例題 方伯伯的玉公尺田 一位大佬的鏈結 有關二維樹狀陣列 關於我做這道題的心路歷程 1.我在某個晚上準備練習dp題,看到方伯伯的玉公尺田這 道題,難度適宜,知識簡單,準備做一做。乙個晚上過去 了,我除了推出了他每一次會抬高最右邊的玉公尺外,還推 出了一大堆錯誤結論,例如一定會從已有的上公升序列中的 ...