7

您所在的位置:网站首页 草坪喷水装置 7

7

2024-07-14 12:02| 来源: 网络整理| 查看: 265

1.题目描述:

长L米,宽W米的草坪里装有n个浇灌喷头。每个喷头都装在草坪中心线上(离两边各W/2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。

请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?

输入格式:

输入包含若干组测试数据。

第一行一个整数T表示数据组数。

每组数据的第一行是整数n、L和W的值,其中n≤10 000。

接下来的n行,每行包含两个整数,给出一个喷头的位置和浇灌半径。

如图1所示的示意图是样例输入的第一组数据所描述的情况。

ttt.jpg

图1

输出格式:

对每组测试数据输出一个数字,表示要浇灌整块草坪所需喷头数目的最小值。如果所有喷头都打开还不能浇灌整块草坪,则输出-1。

输入样例: 3 8 20 2 5 3 4 1 1 2 7 2 10 2 13 3 16 2 19 4 3 10 1 3 5 9 3 6 1 3 10 1 5 3 1 1 9 1

结尾无空行

输出样例: 6 2 -1

结尾无空行

数据范围与提示:

对于100%的数据,n≤15000。

2.代码展示:  #include using namespace std; const int MAX=15005; struct mac{ float left; float right; }a[MAX]; bool cmp(mac x,mac y){ return x.left>T; while(T--){ float n,L,W; cin>>n>>L>>W; int count=0; for(int i=0;i>x>>y; if(y>=W/2){ a[count].left=x-sqrt(y*y-1.0*W*W/4); a[count++].right=x+sqrt(y*y-1.0*W*W/4); } } sort(a,a+count,cmp); int res=0; float right1=0; int flag=1,i=0; while(iright1){ cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3