• 数星星




    数星星

    Accepted : 63   Submit : 245
    Time Limit : 1000 MS   Memory Limit : 65536 KB
     

    Description

    天空中一共有N颗星星,FF同学想知道天空中的一个矩形区域内有多少颗星星。我们把天空放到直角坐标系中,就可以得到每颗星星的坐标,假设每个星星的坐标都是整数。

    矩形区域我们用一个四元组表示(x1,y1,x2,y2)。x1,y1表示矩形左下角的坐标,x2y2表示矩形右上角的坐标。现在请你回答FF同学提出的问题:矩形(x1,y1,x2,y2)内有多少颗星星(包括边界上的)。FF是个好问的同学,最多一次能提出10000个问题,请你用最快的速度回答他。

     

     

    输入格式:

           第一行一个整数N(N<=100000)代表总共星星个数。

           接下来N行,每行2个整数用空格分隔代表一颗星星的坐标x,y0<=x,y<1000)。其中任意两个星星都不在同一个坐标点上。

           接下来一个整数MM<=10000)代表问题的个数。

           接下来M行,每行4个整数用空格分隔代表一个矩形区域x1,y1,x2,y2 (0<=x1,y1,x2,y2<1000)

    输出格式:

           对于每一个问题,输出一个整数A,代表矩形区域内星星个数。

     

    Sample Input

    5
    1 7
    4 0
    9 4
    8 8
    2 4
    2
    0 0 6 7
    1 1 5 7
    
     

    Sample Output

    3
    2
    
     

    Source

    2010年湘潭大学程序设计比赛(Internet)
     
    [ Submit Source Code ]
     
    [ Home Page ]  [ Go Back]
    View Code
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    int a[1001][1001];
    int main()
    {
        int i,j;
        int n,x,y;
    //    cin>>n;
        scanf("%d",&n);
        for (i=0;i<n;i++)
        {
        //    cin>>x>>y;
            scanf("%d%d",&x,&y);
            a[x+1][y+1]=1;
        }
        for (i=1;i<1001;i++)
        {
            for(j=1;j<1001;j++)
            {
                a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
            }
        }
       cin>>n;
       while(n--)
       {
           int x1,y1;
           //cin>>x>>y>>x1>>y1;
         scanf("%d%d%d%d",&x,&y,&x1,&y1);
           cout<<a[x1+1][y1+1]-a[x][y1+1]-a[x1+1][y]+a[x][y]<<endl;
       }
        return 0;
    }
  • 相关阅读:
    作用域随笔
    关于取数组地址的识记(&s+1,s+1,&s[0]+1)
    c中关于#与##的简易使用
    Qt Creator的配置
    sizeof对int long double char的使用
    i++与++i的区别
    for循环执行顺序
    gcc 编译的4个过程简单识记
    各进制之间转化识记
    删除临时文件
  • 原文地址:https://www.cnblogs.com/wujianwei/p/2442991.html
Copyright © 2020-2023  润新知