7 |
您所在的位置:网站首页 › 草坪喷水装置 › 7 |
1.题目描述:
长L米,宽W米的草坪里装有n个浇灌喷头。每个喷头都装在草坪中心线上(离两边各W/2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。 请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头? 输入格式:输入包含若干组测试数据。 第一行一个整数T表示数据组数。 每组数据的第一行是整数n、L和W的值,其中n≤10 000。 接下来的n行,每行包含两个整数,给出一个喷头的位置和浇灌半径。 如图1所示的示意图是样例输入的第一组数据所描述的情况。 图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 |