zoukankan      html  css  js  c++  java
  • UVA1193 Radar Installation

    不妨对于每个需要被监视的点转化为在x轴上可以选择的区间。这样就变成了在n个区间,每个区间需要出现一个点,求最小点数,贪心即可。记录一个last表示最后一个监视器的坐标,按照左端点升序排序,若当前点左端点大于last,则新建一个监视器,last为该区间右端点,否则last为min(last,r)。

    
    const int N = 1e3 + 79;
    int x, y, n, d;
    struct inter {
    	double l, r;
    	bool operator <(const inter&rhs)const {
    		return l < rhs.l;
    	}
    } p[N];
    int main() {
    	int T = 0;
    	while(1) {
    		read(n);
    		read(d);
    		if(!n & !d)  break;
    		cout << "Case " << ++T << ": ";
    		bool flag(0);
    		rep(i, 1, n) {
    			read(x);
    			read(y);
    			if(y > d) {
    				flag= 1;
    				break;
    			}
    			double c = sqrt(1.0 * d * d - 1.0 * y * y);
    			p[i].l = x - c;
    			p[i].r = x + c;
    		}
    		if(flag) {
    			out(-1, '
    ');
    			continue;
    		}
    		std::sort(p + 1, p + n + 1);
    		int num(0);
    		double last = -1e18;
    		rep(i, 1, n) {
    			if(p[i].l > last) {
    				last = p[i].r;
    				++num;
    			} else {
    				last = min(last, p[i].r);
    			}
    		}
    		out(num, '
    ');
    	}
    	return 0;
    }
    

    本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15458566.html

  • 相关阅读:
    过滤器解决乱码问题
    读取配置文件javase
    Django
    python之路
    最火的前端框架--Vue
    web前端
    MySQL笔记
    python 从想学到坚持
    python 坚持下来会更好
    简单的装系统大佬别喷谢谢拉 欢迎指出不足指出
  • 原文地址:https://www.cnblogs.com/QQ2519/p/15458566.html
Copyright © 2011-2022 走看看