D. Points in rectangle

D. Points in rectangle

单点时限: 2.0 sec

内存限制: 512 MB

在二维平面中有一个矩形,它的四个坐标点分别为(0,a),(a,0),(n,na),(na,n)。你现在有m个点,现在你想知道有多少个点是在这个矩形内的(边上的也算)。

输入格式

第一行输入n,a(1a<n103)
第二行一个正整数m(1m103),代表你拥有的点的个数,接下来m行,每行一个点的坐标xi,yi(1xi,yi103)

输出格式

第一行输出在矩形内的点的个数,然后输出在矩形内点的坐标,横坐标大的优先,如果横坐标相同,则纵坐标大的优先。如果没有,输出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
题目分类::计算几何,,四条边的方程我们都可以求出,,然后剩下就是判断了
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
struct stu{
    int x,y;
}e;
int n,a;
vector<stu>ve;

bool cmp(stu aa,stu bb){
    if(aa.x!=bb.x) return aa.x>bb.x;
    return aa.y>bb.y; 
}
int main()
{
    cin>>n>>a;
    int t;
    cin>>t;
    int x1,y1;
    for(int i=0;i<t;i++){
        cin>>e.x>>e.y;
        if(e.x+e.y>=a&&e.x+e.y<=2*n-a&&e.x-e.y<=a&&e.y-e.x<=a)//判断条件
            ve.push_back({e});
    }
    if(ve.size()==0)
        puts("-1");
    else 
    { 
        cout<<ve.size()<<endl;
        sort(ve.begin(),ve.end(),cmp);
        for(int i=0;i<ve.size();i++)
            cout<<ve[i].x<<" "<<ve[i].y<<endl;    
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Accepting/p/11258725.html