噴水裝置(二)

2021-06-29 10:37:54 字數 1793 閱讀 1953

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:4 描述

有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n(n<=10000)個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。

輸入第一行輸入乙個正整數n表示共有n次測試資料。

每一組測試資料的第一行有三個整數n,w,h,n表示共有n個噴水裝置,w表示草坪的橫向長度,h表示草坪的縱向長度。

隨後的n行,都有兩個整數xi和ri,xi表示第i個噴水裝置的的橫座標(最左邊為0),ri表示該噴水裝置能覆蓋的圓的半徑。

輸出每組測試資料輸出乙個正整數,表示共需要多少個噴水裝置,每個輸出單獨佔一行。

如果不存在一種能夠把整個草坪濕潤的方案,請輸出0。

樣例輸入

2

2 8 6

1 14 5

2 10 6

4 56 5

樣例輸出

1

2

我的**:

#include#include#include#include using namespace std;

struct s

t[1000000];

int cmp(const s& c,const s& d)

} sort(t,t+k,cmp);

i=0;

int cnt=0;

end=t[0].a;

while (end<=w&&i0||max1

#include #include #include using std::sort;

struct nodes[1005];

int cmp(node a, node b)

int main()

} sort(s, s+j, cmp);//排序

// for(i = 0; i < j; i ++)

if(s[0].le > 0) //如果第乙個要大於0, 就是0到不了,直接輸出0

double end = 0;

i = 0;

int cou = 0;

while(end <= w&&i < j&&cou <= n)

end = temp+0.000001;//每次都只加上0.00001,倆區間有斷點,就能區分

++cou;

} if(end < w||cou > n)

double left() const

double right() const

friend ostream & operator<<(ostream& out,const circle& circle);

private:

double x,r;

};ostream & operator<<(ostream& out,const circle& circle)

sort(rs.begin(),rs.end(),circleless());

vectorchoosed;

choosed.push_back(-1);

double len=0;

try{

while(len::size_type i=choosed.back()+1;i!=rs.size();i++)

{if (rs[i].left()<=len)

{//cout<

噴水裝置 二

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...

噴水裝置(二)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...

噴水裝置(二)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n n 10000 個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。...