NYOJ 6 喷水装置(一)
来源:互联网 发布:hp61墨盒清零软件 编辑:程序博客网 时间:2024/04/30 01:36
描述
现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。 输入第一行m表示有m组测试数据
每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。输出输出所用装置的个数样例
输入
252 3.2 4 4.5 6 101 2 3 1 2 1.2 3 1.1 1 2
样例输出
25
如图,根据勾股定理计算出每个圆能覆盖的长度即可。因为类型为double.,注意写快排的comp()函数时要用条件运算符。
#include <stdio.h>#include <stdlib.h>#include <math.h>double blow[601]; //喷水装置半径int n; int comp(const void *a,const void *b){ return (*(double *)b-*(double *)a)>0?1:-1 ; //降序} void readr(void){ scanf("%d",&n); int i; for (i=0;i<n;i++) { scanf("%lf",&blow[i]); } } void dabble(void){ int i; double sum=0; double temp; qsort(blow,n,sizeof(double),comp); for (i=0;i<n;i++) { temp=sqrt(blow[i]*blow[i]-1) *2; //勾股定理计算覆盖范围 blow[i]=temp; } for (i=0;i<n;i++) { if (sum<20) { sum+=blow[i]; } else break; } printf("%d\n",i); }int main(){ int m; scanf("%d",&m); while(m--) { readr(); dabble(); } return 0; }
0 0
- nyoj 6 喷水装置(一)
- NYOJ-6:喷水装置(一)
- nyoj 6 喷水装置(一)
- NYOJ 6 喷水装置(一)
- NYOJ,6,喷水装置(一)
- NYOJ 6 喷水装置(一)
- NYOJ 6 喷水装置(一)
- NYOJ 6 喷水装置(一)
- Nyoj 6 喷水装置(一)
- NYOJ 6 喷水装置(一)
- NYOJ 题目6 喷水装置(一)
- NYOJ 6 喷水装置(一)
- NYOJ-6 喷水装置(一)
- nyoj.6 喷水装置(一) 20141101
- NYOJ 6 喷水装置(一)
- NYOJ 6 喷水装置(一)
- NYOJ 6 喷水装置(一)
- nyoj 6 喷水装置(一)
- 帧、行、场
- 《卓越程序员密码》
- 在Objective-C中实现Delegate:协议
- Let us learn C in Code <10>
- 如何设置控件的背景为透明的
- NYOJ 6 喷水装置(一)
- ShowMessage或者Messagebox弹出后出现access violation......
- poj1338
- redis的简单理解
- mac上安装brew出现的问题
- 基于android的远程视频监控系统
- 微软的一个面试题
- Android同步类:Mutex和Condition
- poj2083