牛牛数星星

时间限制:1秒
空间限制:32768K

一闪一闪亮晶晶,满天都是小星星,牛牛晚上闲来无聊,便躺在床上数星星。
牛牛把星星图看成一个平面,左上角为原点(坐标为(1, 1))。现在有n颗星星,他给每颗星星都标上坐标(xi,yi),表示这颗星星在第x行,第y列。
现在,牛牛想问你m个问题,给你两个点的坐标(a1, b1)(a2,b2),表示一个矩形的左上角的点坐标和右下角的点坐标,请问在这个矩形内有多少颗星星(边界上的点也算是矩形内)。 
输入描述:
第一行输入一个数字n(1≤n≤100000),表示星星的颗数。
接下来的n行,每行输入两个数xi和yi(1≤xi,yi≤1000),表示星星的位置。
然后输入一个数字m(1≤m≤100000), 表示牛牛询问问题的个数。
接下来m行,每行输入四个数字a1,b1,a2,b2(1≤a1<a2≤1000), (1≤b1<b2≤1000)
题目保证两颗星星不会存在于同一个位置。
输出描述:
输出一共包含m行,每行表示与之对应的每个问题的答案。
输入例子1:
4
1 1
2 2
3 3
1 3
4
1 1 2 2
1 1 3 3
2 2 3 3
1 2 2 3
输出例子1:
2
4
2

2

答案:

#include <iostream>
using namespace std;
int main()
{
    int n,m;
    cin >> n;
    int x[n], y[n];
    for(int i = 0; i < n; i++){
        cin >> x[i] >> y[i];
    }
    cin >> m;
    int p = 2 * m;
    int a[p], b[p];
    for(int j = 0; j < m; j++){
        int u = 2 * j;
        int v = u + 1;
        cin >> a[u] >> b[u] >> a[v] >> b[v];
    }
    for(int i = 0; i < m; i++){
        int c = 0;
        int u = 2 * i;
        int v = u + 1;
        for(int j = 0; j < n; j++){
            if(x[j] >= a[u] && x[j] <= a[v] && y[j] >= b[u] && y[j] <= b[v])
            c++;
        }
    cout << c << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Hello_Rainy/article/details/80900602