PTA 7 11 拯救007 基礎dfs

2021-10-08 19:10:17 字數 3791 閱讀 6159

在老電影「007之生死關頭」(live and let die)中有乙個情節,007被毒販抓到乙個鱷魚池中心的小島上,他用了一種極為大膽的方法逃脫 —— 直接踩著池子裡一系列鱷魚的大腦袋跳上岸去!(據說當年替身演員被最後一條鱷魚咬住了腳,幸好穿的是特別加厚的靴子才逃過一劫。)

設鱷魚池是長寬為100公尺的方形,中心座標為 (0, 0),且東北角座標為 (50, 50)。池心島是以 (0, 0) 為圓心、直徑15公尺的圓。給定池中分布的鱷魚的座標、以及007一次能跳躍的最大距離,你需要告訴他是否有可能逃出生天。

輸入格式:

首先第一行給出兩個正整數:鱷魚數量 n(≤100)和007一次能跳躍的最大距離 d。隨後 n 行,每行給出一條鱷魚的 (x,y) 座標。注意:不會有兩條鱷魚待在同乙個點上。

輸出格式:

如果007有可能逃脫,就在一行中輸出"yes",否則輸出"no"。

輸入樣例 1:

14 20

25 -15

-25 28

8 49

29 15

-35 -2

5 28

27 -29

-8 -28

-20 -35

-25 -20

-13 29

-30 15

-35 40

12 12

輸出樣例 1:

yes輸入樣例 2:

4 13

-12 12

12 12

-12 -12

12 -12

輸出樣例 2:

no作者

陳越單位

浙江大學

**長度限制

16 kb

時間限制

400 ms

記憶體限制

64 mb

題意如圖 :

把所有靠近島嶼的點為起點dfs即可,當dfs到某個點point[i],能跳出去的條件是

x+d>=50 || x-d<=-50 || y+d>=50 || y-d<=-50,即越出邊界

預處理point[i]和point[j]兩兩點之間的距離mtx[i][j]

**如下

#define debug

#ifdef debug

#include

#include

"/home/majiao/mb.h"

#endif

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn (256)

#define ll long long

#define inf (0x7f7f7f7f)

#define fori(lef, rig) for(int i=lef; i<=rig; i++)

#define forj(lef, rig) for(int j=lef; j<=rig; j++)

#define fork(lef, rig) for(int k=lef; k<=rig; k++)

#define qaq (0)

using

namespace std;

#ifdef debug

#define show(x...) \

do while (0)

#else

#define show(x...)

#endif

void

err(

)template

<

typename t,

typename..

. a>

void

err(t a, a.

.. x)

namespace fastio

void

print()

template

<

typename t,

typename..

. t2>

inline

void

read

(t &x, t2 &..

. oth)

while

(isdigit

(ch)

) x *

= f;

read

(oth...

);}template

<

typename t>

inline

void

put(t x)

if(x<0)

int num=0;

char ch[

128]

;while

(x) ch[

++num]

= x %10+

'0', x /=10

;while

(num)

putchar

(ch[num--])

;putchar

('\n');

}};// namespace fastio

using fastio::read;

using fastio::put;

int n, m, q, k;

struct node a[maxn]

;double mtx[maxn]

[maxn]

;inline

double

dist

(double x1,

double x2,

double y1,

double y2)

bool canout =

false

, vis[maxn]

;//判斷當前座標(x,y)是否可以跳出去

#define out(x, y) ((x+m>=50) || (x-m)<=-50 || ((y+m>=50) || (y-m)<=-50))

void

dfs(

int u)

for(

int i=

1; i<=n; i++)}

signed

main()

#endif

}for

(int i=

1; i<=n; i++

)//預處理任意兩點間的距離

for(

int j=

1; j<=n; j++

)for

(int i=

0; i<

int(start.

size()

)&&!canout; i++

)printf

("%s\n"

, canout ?

"yes"

:"no");

#ifdef debug

clock_t etime =

clock()

;printf

("rum time: %lf 秒\n",(

double

)(etime-stime)

/clocks_per_sec)

;#endif

return0;

}

PTA 7 11 關鍵活動 最短答案!

題目詳情 題目分析 特殊的輸入樣例 11141 2413 3245 3434 5146 6575 6728 3793 79106 410210 65611 4輸出樣例 213 44 106 118 39 310 6注意這裡面沒有6 7 圖中終點最早發生時間為21,而7這個終點最早發生時間為19,所以...