JZOJ1271.【USACO题库】2.4.1 The Tamworth Two两只塔姆沃斯牛

xiaoxiao2021-02-28  102

题目描述

两只牛在森林里故意走丢了。农民John开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和John)。

追击在10x10的平面网格内进行。一个格子可以是:

一个障碍物,

两头牛(它们总在一起), 或者

农民John.

两头牛和农民John可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。

一个格子可以是:

. 空地

障碍物

C 两头牛

F 农民John

这里有一个地图的例子::

……..

……*…

……..

……….

…*.F….

…..…

…*……

..C……*

….….

..……

牛在地图里以固定的方式游荡。每分钟,它们可以向前移动或是转弯。如果前方无障碍且不会离开地图,它们会按照原来的方向前进一步。否则它们会用这一分钟顺时针转90度。

农民John, 深知牛的移动方法,他也这么移动。

每次(每分钟)农民John和两头牛的移动是同时的。如果他们在移动的时候穿过对方,但是没有在同一格相遇,我们不认为他们相遇了。当他们在某分钟末在某格子相遇,那么追捕结束。开始时,John和牛都面向北方。

PROGRAM NAME: ttwo

INPUT FORMAT

Lines 1-10:

每行10个字符,表示如上文描述的地图。

SAMPLE INPUT (file ttwo.in)

……..

……*…

……..

……….

…*.F….

…..…

…*……

..C……*

….….

..……

OUTPUT FORMAT

输出一个数字,表示John需要多少时间才能抓住牛们。输出0,如果John无法抓住牛。

SAMPLE OUTPUT (file ttwo.out)

49

输入

输出

样例输入

样例输出

数据范围限制

好吧手懒很久没更博客了,OI渣渣表示进不了省选……

思路: 纯模拟 为了美观点决定用dfs(然而模拟思路没区别) dfs注意步数累加过6210+会傻掉,判断即可

代码:

var a:array[0..11,0..11]of longint; n,i,j,x0,y0,x1,y1:longint; ch:char; procedure readin; var s:string; begin for i:=0 to 11 do begin a[i,0]:=1; a[0,i]:=1; a[i,11]:=1; a[11,i]:=1; end; for i:=1 to 10 do begin readln(s); for j:=1 to 10 do begin ch:=s[j]; if ch='F'then begin x0:=i; y0:=j; end; if ch='C'then begin x1:=i; y1:=j; end; if ch='*'then begin a[i,j]:=1; end; end; end; end; procedure change(var x,y,v:longint); var i,j:longint; begin i:=x; j:=y; case v of 1:dec(i); 2:inc(j); 3:inc(i); 4:dec(j); end; if a[i,j]<>1 then begin x:=i; y:=j; end else begin if v<>4 then inc(v) else v:=1; end; end; procedure doit(x0,y0,xx,x1,y1,yy,v:longint); begin if v>6200 then begin writeln(0); halt; end; change(x0,y0,xx); change(x1,y1,yy); if (x0=x1)and(y0=y1)then begin writeln(v+1); halt; end else doit(x0,y0,xx,x1,y1,yy,v+1); end; begin readin; doit(x0,y0,1,x1,y1,1,0); end.
转载请注明原文地址: https://www.6miu.com/read-39520.html

最新回复(0)