radar.java

来自「PKU中一些数据结构基本算法题的java实现」· Java 代码 · 共 93 行

JAVA
93
字号
package PKU.GA;
import java.io.*;
import java.util.*;

/**
 * ID:1328
 * 贪心法
 * 
 * @author yhm
 *
 */
public class Radar {
	
	public static void main(String[] argv){
		seg[] control = new seg[1000];
		
		int cases=0;
		int count=0;
		Scanner stdin = new Scanner(System.in);
		while(true){
			int n=stdin.nextInt();
			int b=stdin.nextInt();
			cases++;
			count=1;
			
			boolean nosolution=false;
			if(n==0)return;
			for(int i=0;i<n;i++){
				control[i]=new seg();
				int x=stdin.nextInt();
				int y=stdin.nextInt();
				if(y>b){nosolution=true;}
				else{
					double fx=Math.sqrt(b*b-y*y);
					control[i].left=x-fx;
					control[i].right = x+fx;
				}
			}
			if(nosolution){
				System.out.println("Case "+cases+": -1");
				continue;
			}
			count = solve(control,n);
			System.out.println("Case "+cases+": "+count);

		}
	}
	
	static int solve(seg[] control,int n){
		Arrays.sort(control,0,n);
		seg current = new seg();
		int num = 1;
		current.left = control[0].left;
		current.right = control[0].right;
		for(int i=0;i<n;i++){
			if(control[i].left.compareTo(current.right)<=0){
				current.left = control[i].left;
				current.right = Math.min(current.right, control[i].right);
			}
			else{
				current.left = control[i].left;
				current.right = control[i].right;
				num++;
			}
		}
		return num;
		
		
	}
}



class seg implements Comparable{
	public Double left;
	public Double right;

	public seg(double left, double right) {
		super();
		this.left = left;
		this.right = right;
	}
	public seg() {
		super();
		this.left = new Double(0);
		this.right = new Double(0);
	}
	public int compareTo(Object r){
		seg o=(seg)r;
		return left.compareTo(o.left);
	}
	
} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?