洛谷 p2504 [haoi2006]聰明的猴子
在乙個熱帶雨林中生存著一群猴子,它們以樹上的果子為生。昨天下了一場大雨,現在雨過天晴,但整個雨林的地表還是被大水淹沒著,部分植物的樹冠露在水面上。猴子不會游泳,但跳躍能力比較強,它們仍然可以在露出水面的不同樹冠上來回穿梭,以找到喜歡吃的果實。
現在,在這個地區露出水面的有n棵樹,假設每棵樹本身的直徑都很小,可以忽略不計。我們在這塊區域上建立直角座標系,則每一棵樹的位置由其所對應的座標表示(任意兩棵樹的座標都不相同)。
在這個地區住著的猴子有m個,下雨時,它們都躲到了茂密高大的樹冠中,沒有被大水沖走。由於各個猴子的年齡不同、身體素質不同,它們跳躍的能力不同。有的猴子跳躍的距離比較遠(當然也可以跳到較近的樹上),而有些猴子跳躍的距離就比較近。這些猴子非常聰明,它們通過目測就可以準確地判斷出自己能否跳到對面的樹上。
【問題】現已知猴子的數量及每乙個猴子的最大跳躍距離,還知道露出水面的每一棵樹的座標,你的任務是統計有多少個猴子可以在這個地區露出水面的所有樹冠上覓食。
輸入格式:
輸入檔案monkey.in包括:
第1行為乙個整數,表示猴子的個數m(2<=m<=500);
第2行為m個整數,依次表示猴子的最大跳躍距離(每個整數值在1--1000之間);
第3行為乙個整數表示樹的總棵數n(2<=n<=1000);
第4行至第n+3行為n棵樹的座標(橫縱座標均為整數,範圍為:-1000--1000)。
(同一行的整數間用空格分開)
輸出格式:
輸出檔案monkey.out包括乙個整數,表示可以在這個地區的所有樹冠上覓食的猴子數。
輸入樣例#1: 複製
4輸出樣例#1: 複製1 2 3 4
60 0
1 01 2
-1 -1
-2 0
2 2
3【資料規模】
對於40%的資料,保證有2<=n <=100,1<=m<=100
對於全部的資料,保證有2<=n <= 1000,1<=m=500
思路:求出每兩棵樹的間距,根據間距求最小生成樹,最小生成樹中權值最大的邊即為猴子需要跳的最大距離,然後列舉猴子能跳的最遠距離,與這個權值相比較即可
#include #includeview code#include
#include
using
namespace
std;
const
int m = 1000000
;double
sum;
intn, m, k;
inttot, ans;
intx[m], y[m];
intfa[m], far[m];
struct
nond e[m];
int find(int
x) bool
cmp(nond x, nond y)
intmain()
for (int i = 1; i <= m; i++)
for (int j = i + 1; j <= m; j++)
sort(e + 1, e + k + 1
, cmp);
for (int i = 1; i <= k; i++)
for (int i = 1; i <= n; i++)
if (far[i] >= sum) ans++;
printf(
"%d\n
", ans);
return0;
}
洛谷P2504 HAOI2006 聰明的猴子
在乙個熱帶雨林中生存著一群猴子,它們以樹上的果子為生。昨天下了一場大雨,現在雨過天晴,但整個雨林的地表還是被大水淹沒著,部分植物的樹冠露在水面上。猴子不會游泳,但跳躍能力比較強,它們仍然可以在露出水面的不同樹冠上來回穿梭,以找到喜歡吃的果實。現在,在這個地區露出水面的有n棵樹,假設每棵樹本身的直徑都...
洛谷 P2504 HAOI2006 聰明的猴子
在乙個熱帶雨林中生存著一群猴子,它們以樹上的果子為生。昨天下了一場大雨,現在雨過天晴,但整個雨林的地表還是被大水淹沒著,部分植物的樹冠露在水面上。猴子不會游泳,但跳躍能力比較強,它們仍然可以在露出水面的不同樹冠上來回穿梭,以找到喜歡吃的果實。現在,在這個地區露出水面的有n棵樹,假設每棵樹本身的直徑都...
洛谷P2504 HAOI2006 聰明的猴子題解
題目 記錄悲傷 已知猴子的數量以及猴子跳的最大距離 已知數的數量以及樹的座標 最小生成樹 每兩棵樹之間的距離需要列舉來計算 算出最大值之後再與n只猴子進行比較記錄答案 需要注意 在使用最小生成樹的時候 我們的fa陣列是記錄的邊他儲存的是一棵樹 結構體儲存的資訊也是一棵樹 最後判斷是否已經構成一棵樹時...