NOIP2017提高組Day 2 乳酪

2021-10-17 11:45:36 字數 1388 閱讀 2808

現有一塊**酪,它的高度為 h,它的長度和寬度我們可以認為是無限大的,乳酪中間有許多 半徑相同 的球形空洞。我們可以在這塊乳酪中建立空間座標系,在座標系中,乳酪的下表面為z = 0,乳酪的上表面為z = h。

現在,乳酪的下表面有乙隻小老鼠 jerry,它知道乳酪中所有空洞的球心所在的座標。兩相切或是相交,則 jerry 可以從其中乙個空洞跑到另乙個,特別地,如果乙個空洞與下表面相切或是相交,jerry 則可以從乳酪下表面跑進空洞;如果乙個空洞與上表面相切或是相交,jerry 則可以從空洞跑到乳酪上表面。

位於乳酪下表面的 jerry 想知道,在 不破壞乳酪 的情況下,能否利用已有的空洞跑到乳酪的上表面去?

每個輸入檔案包含多組資料。

輸入檔案的第一行,包含乙個正整數 t,代表該輸入檔案中所含的資料組數。

接下來是 t 組資料,每組資料的格式如下:

第一行包含三個正整數 n,h 和 r,兩個數之間以乙個空格分開,分別代表乳酪中空洞的數量,乳酪的高度和空洞的半徑。

接下來的 n 行,每行包含三個整數 x、y、z,兩個數之間以乙個空格分開,表示空洞球心座標為(x,y,z)。

輸出檔案包含 t 行,分別對應 t 組資料的答案,如果在第 i 組資料中,jerry 能從下表面跑到上表面,則輸出「 yes 」,如果不能,則輸出「 no 」(均不包含引號)。

這道題我的方法是先預處理出那兩個點能夠互相到達,就是dist(p1,p2)小於2r,兩個點就可以互相到達,還要預處理出那些球能夠到達底面或者頂面,最後從底面dfs,如果能到達頂面,就輸出yes,否則輸出no。

#include

#define rg register int

using

namespace std;

long

long t,n,h,r,x[

1005

],y[

1005

],z[

1005

],f[

1005][

1005

],bz[

1005

],ans;

intdist

(int i,

int j)

void

dfs(

int x)

bz[x]=1

;for

(rg i=

1;i<=n+

1;i++)if

(f[x]

[i]&&

(!bz[i]))

}int

main()

dfs(0)

;if(ans)

printf

("yes\n");

else

printf

("no\n");

}return0;

}

Noip2017提高組 乳酪

noip 2017 提高組 不怎麼難啦 思路如下 首先先寫乙個函式判斷兩個洞是否相連,即兩洞之間距離是否小於等於球直徑 注意是直徑 struct dong dong p 1001 bool pd dong a,dong b 第二個難點在於如何判斷是否可以穿過乳酪,對此我們可以模擬老鼠鑽洞 run函式...

NOIP2017提高組 列隊

noip2017提高組 day2 t3 sylvia 是乙個熱愛學習的女孩子。前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n m 名學生,方陣的行數為 n,列數為 m 為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中的學...

NOIP 2017 提高組 寶藏

傳送門 參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n nn 個深埋在地下的寶藏屋,也給出了這 n nn 個寶藏屋之間可供開發的 m mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...