雷达安装(贪心算法)
来源:互联网 发布:淘宝怎么设置不同规格 编辑:程序博客网 时间:2024/04/27 06:42
import java.io.*;
class point
...{
int x;
int y;
public point(int x,int y)
...{
this.x=x;
this.y=y;
}
}
class Test5 //贪心算法
...{
public static void main(String[] args) throws Exception
...{
BufferedReader bf=new BufferedReader(new FileReader("Radar.in"));
String str;
int rank=0;
while(!(str=bf.readLine()).equals("0 0"))
...{
rank++;
int p=str.indexOf(' ');
int n=Integer.parseInt(str.substring(0,p));
int d=Integer.parseInt(str.substring(p+1,str.length()));
point POINT[]=new point[n];
int x,y;
for(int i=0;i<n;i++)
...{
str=bf.readLine();
p=str.indexOf(' ');
x=Integer.parseInt(str.substring(0,p));
y=Integer.parseInt(str.substring(p+1,str.length()));
POINT[i]=new point(x,y);
}
sort(POINT);
int sum=0;//可放雷达的最小数目
int index=0;//索引下标
double position;//雷达放置位置
if(!isOk(POINT,d))
System.out.println(-1);
else
...{
do...{
position=Math.sqrt(d*d-Math.pow(POINT[index].y,2))+POINT[index].x;
index=go(index,position,POINT,d);
sum++;
if(index==-1)break;
}while(true);
}System.out.println("Case "+rank+": "+sum);
}
}
public static boolean isOk(point p[],int d)
...{
for(int i=0;i<p.length;i++)
if(p[i].y>d)
return false;
return true;
}
public static void sort(point p[])
...{
point tmp;
for(int i=0;i<p.length-1;i++)
for(int j=i+1;j<p.length;j++)
...{
if(p[i].x>p[j].x)
...{
tmp=p[j];
p[j]=p[i];
p[i]=tmp;
}
}
}
public static int go(int index,double position,point p[],int d)
...{
int t=-1;//记录point数组的下标
for(int i=index;i<p.length;i++)
...{
if(p[i].y*p[i].y+Math.pow(Math.abs(position-p[i].x),2)<=d*d)
t=i;
else if(p[i].x<=position)
...{
position=Math.sqrt(d*d-Math.pow(p[i].y,2))+p[i].x;
t=i;
}
else break;
}
if(t==p.length-1)
return -1;
return t+1;
}
}
class point
...{
int x;
int y;
public point(int x,int y)
...{
this.x=x;
this.y=y;
}
}
class Test5 //贪心算法
...{
public static void main(String[] args) throws Exception
...{
BufferedReader bf=new BufferedReader(new FileReader("Radar.in"));
String str;
int rank=0;
while(!(str=bf.readLine()).equals("0 0"))
...{
rank++;
int p=str.indexOf(' ');
int n=Integer.parseInt(str.substring(0,p));
int d=Integer.parseInt(str.substring(p+1,str.length()));
point POINT[]=new point[n];
int x,y;
for(int i=0;i<n;i++)
...{
str=bf.readLine();
p=str.indexOf(' ');
x=Integer.parseInt(str.substring(0,p));
y=Integer.parseInt(str.substring(p+1,str.length()));
POINT[i]=new point(x,y);
}
sort(POINT);
int sum=0;//可放雷达的最小数目
int index=0;//索引下标
double position;//雷达放置位置
if(!isOk(POINT,d))
System.out.println(-1);
else
...{
do...{
position=Math.sqrt(d*d-Math.pow(POINT[index].y,2))+POINT[index].x;
index=go(index,position,POINT,d);
sum++;
if(index==-1)break;
}while(true);
}System.out.println("Case "+rank+": "+sum);
}
}
public static boolean isOk(point p[],int d)
...{
for(int i=0;i<p.length;i++)
if(p[i].y>d)
return false;
return true;
}
public static void sort(point p[])
...{
point tmp;
for(int i=0;i<p.length-1;i++)
for(int j=i+1;j<p.length;j++)
...{
if(p[i].x>p[j].x)
...{
tmp=p[j];
p[j]=p[i];
p[i]=tmp;
}
}
}
public static int go(int index,double position,point p[],int d)
...{
int t=-1;//记录point数组的下标
for(int i=index;i<p.length;i++)
...{
if(p[i].y*p[i].y+Math.pow(Math.abs(position-p[i].x),2)<=d*d)
t=i;
else if(p[i].x<=position)
...{
position=Math.sqrt(d*d-Math.pow(p[i].y,2))+p[i].x;
t=i;
}
else break;
}
if(t==p.length-1)
return -1;
return t+1;
}
}
- 雷达安装(贪心算法)
- 贪心算法--雷达安装(poj 1328)
- hlg1414安装雷达【贪心】
- 雷达安装(贪心)
- codevs 2625 雷达安装 贪心
- 二分与贪心-雷达安装问题(算法基础 第9周)
- POJ 1328 Radar Installation(雷达安装)__贪心
- 贪心建雷达
- POJ1328贪心放雷达
- 雷达安装
- SDAU 贪心专题 11 雷达
- poj 1328 雷达覆盖 贪心
- 二分贪心 R 雷达覆盖
- [codevs2625]雷达安装
- POJ 1328 安装雷达
- poj1328 区间贪心 雷达覆盖岛屿
- Radar Installation(贪心,求最小雷达数)
- POJ 1328 岛屿雷达问题 贪心
- 加密
- CSS中float引起层飘出上级层的解决方案,清除浮动的好方法
- PHP 程序员的调试技术
- 掷骰子问题
- J2SE学习笔记(7)多线程
- 雷达安装(贪心算法)
- (转)java中文编码问题
- 用CSS按比例缩放图片
- 大号无锯齿字体
- 初看IronRuby
- 拉格朗日第四定律问题
- 别靠巧合编程
- 花边边框教程
- DIV+CSS实例: 错误页面