• 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

  • 相关阅读:
    模板模式创建一个poi导出功能
    vim python和golang开发环境配置
    vim快捷键
    golang聊天室
    goroutine与channels
    Redis中的GETBIT和SETBIT(转载)
    二叉树
    满二叉树与完全二叉树
    拓扑排序
    ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/QQ2519/p/15458566.html
Copyright © 2020-2023  润新知