POJ1328

POJ原址:POJ1328

这道题没明白哪里有贪心,当然贪心到底是什么也还没弄明白,反正看别人的看懂了,也学会了一些东西。

收获:

1.结构体的运用更清楚了,点类的坐标用成结构体很方便。

2.operator < 这个好像很牛,可是还不知道到底怎么牛。

3.fabs跟abs

4.结构体可以直接当成一个,不论是结构体变量还是结构体数组。


还要感谢大神提供的测试数据,自己自以为是的把参考程序改了一点,就WA了,用过测试数据就改好了:测试数据


参考链接:

【poj】1328 Radar Installation 快排+贪婪-angrad-ChinaUnix博客

这个链接主要参考了前面的叙述,讲的很明白。

poj1328 - Daze - 博客频道 - CSDN.NET

这个参考的程序,画的图也很有助于理解,跟上一个的叙述连起来看就很好懂了。




程序:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

struct point
{
	double left,right;//点类,记录坐标 
}p[2000],temp;

bool operator < (point a,point b)
{
	return a.left<b.left;//比较两个结构体数组,重载成比较两个坐标的横坐标
}

int main()
{
	int n,i,j,num=0;//num计数case,count计数可探测个数 
	double d;
	cin>>n>>d;
	while(n||d)
	{
		bool flag=true;
		for(i=0;i<n;i++)
		{
			double a,b;
			cin>>a>>b;
			if(fabs(b)>d)//可见abs是取绝对值后再取整,而fabs是取绝对值 
    			flag=false;//false表示没有被探测到 
			else
			{
				p[i].left=a-sqrt(d*d-b*b);
				p[i].right=a+sqrt(d*d-b*b);
			}
		}
		num++;
		cout<<"Case "<<num<<": ";
		if(flag==false)
    		cout<<-1<<endl;
		else
		{
			int count=1;
			sort(p,p+n);//才懂得结构体可以直接当成一个 
			temp=p[0];//temp是cur,p[i]是next
			
			for(i=1;i<n;i++)
			{
				if(p[i].left>temp.right)
				{
					count++;
					temp=p[i];
				}
				else if (p[i].right<temp.right)
				{
					temp=p[i];
				}
			}
			cout<<count<<endl;
		}
		cin>>n>>d;
	}
	return 0;
} 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值