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 ...
随机推荐
- 北京联通100M光纤宽带需邀请函 实际速率12MB/S - OFweek光通讯网
[新提醒]随身wifi无法使用FAQ(不断更新中~~~~~~) - 使用问题 - 360官方论坛 undefined 北京联通100M光纤宽带需邀请函 实际速率12MB/S - OFweek光通讯网 ...
- Indiegogo: An International Crowdfunding Platform to Raise Money
Indiegogo: An International Crowdfunding Platform to Raise Money The world's funding platform. Fund ...
- .net设计模式 - 单例模式
DoNet设计模式实例之单例模式( Singleton Pattern) 一 : 单例模式的简介:(Brief Introduction) 单例模式(Singleton Pattern),保证一个类只 ...
- hdu2102(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 分析:bfs求最短时间到达'P'点,不过本题有好几个trick,我都踩到了,自己还是太嫩了... ...
- Android Monkey自己主动化測试
前言 假设你做Android开发,还没有使用过Monkey进行測试,那么今天看到这篇文章,希望能解决你Android測试中的一些问题.起码能帮你省点測试的时间而且发现很多其它的问题. Monkey简单 ...
- Java LinkedBlockingQueue和ArrayBlockingQueue分析
LinkedBlockingQueue是一个链表实现的堵塞队列,在链表一头增加元素,假设队列满.就会堵塞.还有一头取出元素.假设队列为空.就会堵塞. LinkedBlockingQueue内部使用Re ...
- 7款开源Java反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- 基于 Apache Mahout 构建社会化推荐引擎
基于 Apache Mahout 构建社会化推荐引擎 http://www.ibm.com/developerworks/cn/views/java/libraryview.jsp 推荐引擎利用特殊的 ...
- c#怎样获取excel单元格的RGB颜色
这段时间一直在做office的工作.前2天获取单元格的颜色的问题一直没搞明确. 開始我想用的就是Npoi.主要前一部分的工作都是用Npoi完毕的 row.GetCell(j).CellStyle.Fi ...
- 【足迹C++primer】40、动态数组
动态数组 C++语言定义了第二种new表达式语法.能够分配并初始化一个对象数组.标准库中包括 一个名为allocator的类.同意我们将分配和初始化分离. 12.2.1 new和数组 void fun ...