POJ——1328(贪心)

题目地址:http://poj.org/problem?id=1328

个人小结:先求出能灌溉岛屿的圆心范围(在X轴的),然后进行区间覆盖。

解析参考地址 :http://blog.csdn.net/xxm137164869/article/details/6503672

源代码:

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct N
{
 double x1,x2;
}a[1005];
bool cmp(struct N a,struct N b)
{
return a.x1-b.x1<10e-7;
}
int main()
{
int i,j,k;
int m,n;
int d;
static int t=0;
while(cin>>n>>d)
{
if(n==0&&d==0) break;
int num1,num2;
bool flag=true;
for(i=0;i<n;i++)

cin>>num1>>num2;  
if(flag)
{
  if(num2>d) flag=false;
  double mid=sqrt((d*d-num2*num2)*1.0);
  a[i].x1=num1-mid;
  a[i].x2=num1+mid;
  }
}
t++;
if(!flag) 
{
  cout<<"Case "<<t<<": "<<"-1"<<endl;
  continue;
  }
sort(a,a+n,cmp);
int sum=1;
double temp=a[0].x2;
for(i=1;i<n;i++)
 {
  if(a[i].x1-temp>10e-7) 
   {
  sum++;
  temp=a[i].x2;
 }
 else 
 {
  if(a[i].x2-temp<10e-7)
  {
  temp=a[i].x2;
   }
   }
   }
   cout<<"Case "<<t<<": "<<sum<<endl;
}
return 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值