nyoj 题号12 水厂(两)——南阳oj
标题信息:
喷水装置(二)
- 描写叙述
- 有一块草坪。横向长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 1
4 5
2 10 6
4 5
6 5 - 例子输出
-
1
2 -
源代码
#include <stdio.h>
#include <math.h>
#include <stdlib.h> struct QJ
{
double x, y;
}qj[10000];
int cmp(const void* x, const void* y)
{
if ((*(QJ*)x).x == (*(QJ*)y).x)
return (*(QJ*)x).y - (*(QJ*)y).y;
else
return (*(QJ*)x).x - (*(QJ*)y).x;
}
int sel(double e, int used)
{
int s = 0;
double b = 0, max = 0;
while (b < e)
{
max = 0;
for (int k = 0; k < used && qj[k].x <= b; ++k)
{
if (qj[k].y - b > max)
max = qj[k].y - b;
}
if (0 == max)
return 0;
b += max;
s++;
}
return s;
}
int main()
{
int M, N, i, j, k, num, used;
int length, width;
scanf ("%d",&M);
while(M--)
{
used = 0;
scanf ("%d%d%d",&N, &length, &width);
for (i = 0; i < N; i++)
{
scanf("%d%d", &j, &k);
if (k * 2 >= width)
{
double t = sqrt((double)(k*k - width*width / 4));
qj[used].x = j - t;
qj[used++].y = j + t;
}
}
qsort(qj, used, sizeof(qj[0]), cmp);
//for (i = 0; i < used; i++)
// printf("(%.1lf, %.1lf) ", qj[i].x, qj[i].y);
num = sel(length, used);
printf("%d\n", num);
}
return 0;
}
版权声明:本文博主原创文章,转载请注明出处 http://blog.csdn.net/xianyun2009
nyoj 题号12 水厂(两)——南阳oj的更多相关文章
- 【南阳OJ分类之语言入门】80题题目+AC代码汇总
小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...
- IMO 2021 第 1 题拓展问题的两个极值的编程求解
IMO 2021 第 1 题拓展问题的两个极值的编程求解 本篇是 IMO 2021 第一题题解及相关拓展问题分析 的续篇. 拓展问题三: (I). 求 n 的最小值,使得 n, n + 1, ..., ...
- 【公众号系列】两分钟学会SAP F1技巧
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]两分钟学会SAP F1技巧 写 ...
- leecode刷题(12)-- 整数反转
leecode刷题(12)-- 整数反转 整数反转 描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: - ...
- leecode刷题(8)-- 两数之和
leecode刷题(8)-- 两数之和 两数之和 描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输 ...
- leecode刷题(6)-- 两个数组的交集II
leecode刷题(6)-- 两个数组的交集II 两个数组的交集II 描述: 给定两个数组,编写一个函数来计算它们的交集. 示例: 输入: nums1 = [1,2,2,1], nums2 = [2, ...
- 【c语言】不用大与小与号,求两数最大值
// 不用大与小与号,求两数最大值 #include <stdio.h> int max(int a, int b) { int c = a - b; int d = 1 << ...
- 量子化学Gaussian技术实战课 2021年4月9号--12号 远程在线教学
材料模拟分子动力学课程 3月19号--22号 远程在线课 lammps分子动力学课程 3月12号--15号 远程在线课 第一性原理VASP实战课 3月25号-28号 远程在线课 量子化学Gaussia ...
- [Swust OJ 666]--初来乍到(题号都这么溜~~,递归,找规律)
题目链接:http://acm.swust.edu.cn/problem/0666/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
随机推荐
- android4.3环境搭建
方案一: 首先android环境搭建有如下几个东西是必须准备的: 1. Eclipse (下载地址:http://www.eclipse.org/downloads/,建议至少3.4及以上版本) 2 ...
- hdu1260(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 分析:简单dp,dp[i]=min(dp[i-1]+a[i],dp[i-2]); #includ ...
- unity中的MonoBehaviour.OnMouseDown()
在官网的api文档中仅说明了 Description OnMouseDown is called when the user has pressed the mouse button while ov ...
- c++多态的案例分析
近期在研究c++中多态的应用 ,当中遇到些许的疑问与问题,可是终于的结果是不容置疑的,以下记录下我的学习过程,以纪念本个知识点. 首先,是从一个案例開始的,题目大意是这种: 设定一个多边形的公共类,然 ...
- Fedora16 安装相关
安装BCM4312无线网卡驱动 Linux系统BCM4312无线网卡驱动的安装 联想Y450 Linux系统 无线网卡驱动安装 准备工作: Broadcom官网驱动下载地址 http://www.br ...
- awk使用的实例
1.使用split函数 name.url的内容: 上海 http://trip.elong.com/shanghai/jingdian elong destination 云南 htt ...
- MYSQL中取当前年份的第一天和当前周,月,季度的第一天/最后一天
mysql 获取当年第一天的年月日格式:SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY); MySQL里获取当前week.month ...
- JS创建 trim() 方法,此方法在IE7、IE8中不存在 需要自定义
function trim(str){ //创建空格对象 var space = new String(" "); /* str = trimLeft(str,space); st ...
- 13-7-5 android Tabhost功能实现
开始使用了一个Activity做界面切换,采用visible.gone写法,感觉太麻烦了. layoutHousehold.setVisibility(View.GONE); layoutCamera ...
- 1104. Don’t Ask Woman about Her Age(数论)
a*b^n(mod(b-1) =a(mod(b-1) http://acm.timus.ru/problem.aspx?space=1&num=1104 #include <stdio. ...