暑期集训积分赛(二) D. Points in rectangle

暑期集训积分赛(二) D. Points in rectangle
题目:
在二维平面中有一个矩形,它的四个坐标点分别为(0,a),(a,0),(n,n−a),(n−a,n)。你现在有m个点,现在你想知道有多少个点是在这个矩形内的(边上的也算)。
输入格式:
第一行输入n,a(1≤a<n≤103)。
第二行一个正整数m(1≤m≤103),代表你拥有的点的个数,接下来m行,每行一个点的坐标xi,yi(1≤xi,yi≤103)
输出格式:
第一行输出在矩形内的点的个数,然后输出在矩形内点的坐标,横坐标大的优先,如果横坐标相同,则纵坐标大的优先。如果没有,输出−1。
input:
6 1
5
1 2
1 3
2 3
3 4
4 5
output:
4
4 5
3 4
2 3
1 2
//用优先队列
代码+解释:

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cmath>
using namespace std;
struct node
{
	double x;
	double y;//记录坐标对 
	/*bool operator<(const node & p)const//此行<符号不能改变  A
	{  
		if(x==p.x)
			return y<p.y;//如果横坐标相同 ,则按纵坐标降序排列
		else
			return x<p.x;//按横坐标降序排列
	}*/
	bool operator<(const node & p)const//此行<符号不能改变  B
	{  
		if(x==p.x)
			return y>p.y;//如果横坐标相同 ,则按纵坐标升序排列
		else
			return x>p.x;//按横坐标升序排列
	}
	/*bool friend operator<(node a,node b)//此行<符号不能改变  C
	{
		if(a.x==b.x)
			return a.y<b.y;//如果横坐标相同 ,则按纵坐标降序排列
		else
			return a.x<b.y;//按横坐标降序排列 
	}*/
	/*bool friend operator<(node a,node b)//此行<符号不能改变  D
	{
		if(a.x==b.x)
			return a.y>b.y;//如果横坐标相同 ,则按纵坐标升序排列
		else
			return a.x>b.y;//按横坐标升序排列 
	}*/
	//以上两种重载形式均可 
};
//6 1 6 1 2 1 3 2 3 3 4 4 5 4 4.5
int main()
{
	double n,a;
	int m;
	double x,y;
	priority_queue<node>que;//定义一个优先队列
	while(cin>>n>>a>>m)
	{
		int count=0; 
		for(int i=0;i<m;i++)//一共有点m个,循环m次
		{
			node p;//定义一个结构体 
			cin>>x>>y;
			p.x=x;
			p.y=y;//存入 
			if(y<=x+a && y>=x-a && y<=2*n-a-x && y>=a-x)//判定是否在矩形
			{
				count++;//每满足一个数次数就加一 
				que.push(p);//如果坐标满足条件,就把坐标放进队列 
			}
		}
		//把所有的坐标对存入结构体放进队列之后
		if(count==0)
			cout<<"-1"<<endl;
		else
		{
			cout<<count<<endl;
			for(int i=0;i<count;i++)
			{
				node q=que.top();
				cout<<q.x<<" "<<q.y<<endl;
				que.pop();//清空 
				//在队列输出过程中,以运行B为例
				//测试数据:
				//6 1 
				//6 
				//1 2 
				//1 3 
				//2 3 
				//3 4 
				//4 5 
				//4 4.5
				//输出:
				//5
				//1 2
				//3 4
				//2 3
				//4 4.5
				//4 5 
				//if(x==p.x)
				//	return y>p.y;//如果横坐标相同 ,则按纵坐标升序排列,当横坐标相同时纵坐标越小的先出列 
				//else
				//	return x>p.x;//按横坐标升序排列,说明横坐标越小先出列 
			}	
		}
		
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: java.awt.Rectangle是Java编程语言中的一个类,用于表示一个矩形的位置和大小。它包含了四个整数类型的变量,分别表示矩形的左上角的x坐标、y坐标,以及矩形的宽度和高度。这个类提供了一些方法,可以用来操作矩形,比如判断两个矩形是否相交、获取矩形的面积等。在Java图形界面编程中,java.awt.Rectangle类经常被用来表示组件的位置和大小。 ### 回答2: java.awt.Rectangle是Java语言中的一个类,用于表示一个矩形对象。 Rectangle类位于java.awt包,并且是一个抽象类。它提供了一系列方法用于对矩形进行操作,例如增加、减少矩形的大小,判断两个矩形是否相交等。 Rectangle类有四个主要的属性:x,y,width和height。x和y表示矩形的左上角坐标,而width和height表示矩形的宽度和高度。 Rectangle类提供了许多方法来操作这些属性。例如,可以使用setLocation方法来设置矩形的左上角坐标,使用setSize方法来设置矩形的大小,使用contains方法来判断一个点是否在矩形内部等。此外,还可以使用intersect方法来判断两个矩形是否相交,使用union方法来获取包含两个矩形的最小矩形等。 Rectangle类还提供了一些其他的方法来处理矩形。例如,可以使用translate方法来平移矩形,使用grow方法来扩大或缩小矩形的大小等。 总之,java.awt.Rectangle类是Java语言中用于表示矩形的一个类。它提供了一系列方法来操作矩形的属性,以及处理矩形的各种操作。通过使用Rectangle类,我们可以方便地对矩形进行操作和处理。 ### 回答3: java.awt.Rectangle是Java编程语言中的一个类,用于表示一个矩形的几何形状。它包含了矩形的位置和大小信息,可以用来进行矩形的操作和计算。 Rectangle类提供了一系列方法,用于获取和设置矩形的坐标、宽度和高度。它还可以用于判断两个矩形之间的关系,比如判断是否相交、包含等。另外,Rectangle还提供了一些常用的方法,比如计算矩形的面积和周长,判断点是否在矩形内部等。 Rectangle类可以在图形界面编程中用于绘制和操作矩形。通过设置Rectangle对象的属性,可以控制矩形的位置和大小,从而实现矩形的显示和交互效果。在页面布局中,Rectangle可以用来计算和调整组件的位置和大小,从而实现自适应和响应式的布局效果。 此外,Rectangle类还可以与其他图形对象进行组合和操作。比如,可以通过Rectangle类的方法来计算两个矩形的并集、交集等。同时,还可以通过Rectangle的方法来判断一个点是否在某个矩形内部,或者判断一个矩形是否与另一个图形对象相交等。 总之,java.awt.Rectangle是一个非常常用的图形类,可以方便地表示和操作矩形形状。它提供了丰富的方法,可以满足各种矩形操作的需求,并且可以与其他图形对象进行组合和处理,具有很大的灵活性和应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值