您的位置:首页 > 其它

poj 1328 Radar Installation 贪心

2015-10-24 17:14 337 查看
老规矩,链接思密达http://poj.org/problem?id=1328

典型贪心

主要有三个问题

1.sort函数里加的n不能是int外的类型,完全没碰到过这么wa的

2.结构体的cmp函数,<是升序,>是降序

3.没考虑到一个特殊情况,就是下一个区间如果右点小于上一个的右点要更新公共右点,下面代码

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
struct qujian
{
double left;
double right;
}dao[1005];
bool cmp(qujian a,qujian b){
return a.left<b.left;
}//升序排列
int main()
{
double d,flag,y,x,chang,num,comright,m;
int b,n;

while(cin>>n>>d&&(n!=0||d!=0))
{
num=1;
m++;
flag=1;
if(d==0)
flag=0;
for(int i=0;i<n;i++)
{
cin>>x>>y;
chang=sqrt(d*d-y*y);
dao[i].left=x-chang;
dao[i].right=x+chang;
if(y>d)
flag=0;
}
if(flag==0)
{
cout<<"Case "<<m<<": "<<-1<<endl;
continue;
}
else
if(n==0)
{
cout<<"Case "<<m<<": "<<0<<endl;
continue;
}
sort(dao,dao+n,cmp);
comright=dao[0].right;
for(b=1;b<n;b++)
{
if(dao[b].left>comright)
{
num++;
comright=dao[b].right;

}
else
{
if(dao[b].right<=comright)
comright=dao[b].right;
}
}
cout<<"Case "<<m<<": "<<num<<endl;
}

return 0;
}


c++交,g++有毒
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: