2018蓝桥杯模拟赛(一)I【容斥原理】

在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星。

蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象。天上有 n颗星星,他能知道每一颗星星的坐标和亮度。

现在,蒜头君问自己 q次,每次他问自己每个矩形区域的星星的亮度和是多少(包含边界上的星星)。
这里写图片描述
输入格式

第一行输入一个整数 n(1≤n≤50000) 表示星星的数量。

接下里 nnn 行,每行输入三个整数 x,y,w(0≤x,y,w≤2000),表示在坐标 (x,y) 有一颗亮度为 www 的星星。注意一个点可能有多个星星。

接下来一行输入一个整数 q(1≤q≤50000),表示查询的次数。

接下来 qqq 行,每行输入四个整数 x1,y1,x2,y2,其中 (x1,y1) 表示查询的矩形的左下角的坐标,(x2,y2) 表示查询的矩形的右上角的坐标,0≤x1≤x2≤2000 ,0≤y1≤y2≤2000
输出格式

对于每一次查询,输出一行一个整数,表示查询的矩形区域内的星星的亮度总和。

样例输入

5
5 0 6
7 9 7
8 6 13
9 7 1
3 0 19
4
0 8 7 9
0 0 7 10
2 7 10 9
5 4 7 5
样例输出

7
32
8
0

/*
如果坐标都从0开始算 但是公式是从i= j = 1开始  sum[i][j] = sum[i][j] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1]; 那么比如(3,0)=4,那么(4.0)应该也得4,才可以保证之后算的(4,1)是正确的。但是由于坐标中有0 的情况没有计算,导致内部的点也计算错误 
*/
#include<iostream>
#include<cstring>
using namespace std;
int n;
long long int sum[2005][2005];
int x,y;
long long int w;
int q;
int x1,y1,x2,y2;
long long int ans;
int main()
{
    memset(sum,0,sizeof(sum));
    cin>>n;
    for(int i = 0;i<n;i++)
    {
        cin>>x>>y>>w;
        sum[x+1][y+1] += w;//同一个点可能有多个星星,所以是累加  如果不是x+1 y+1 那么 
    }
    //将sum[x][y]记录为以原点为左下角,以(x,y)为右上角的矩形的亮度之和 
    //当坐标都往上往右移动之后,虽然1和j从1开始,但是实际坐标中包含0 的那些坐标也包含在内,参与计算 
    for(int i = 1;i<=2001;i++)
    {
        for(int j = 1;j<=2001;j++)
        {
            sum[i][j] = sum[i][j] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1];
        }
    }
    //cout<<sum[6][1]<<endl;
//      cout<<sum[8][10]<<endl;
//          cout<<sum[9][7]<<endl;
////                cout<<sum[10][8]<<endl;
//                  cout<<sum[4][1]<<endl;
    cin>>q;

    for(int i = 0;i<q;i++)
    {
        cin>>x1>>y1>>x2>>y2;
        x1++;
        y1++;
        x2++;
        y2++;
        //if(x1>0&&y1>0)
        ans = sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1];
    //要是都已经往上往右移动了 就不用以下再分情况了 
        //else if(x1 == 0&&y1 == 0) ans = sum[x2][y2];
        //else if (x1 == 0)
        //ans = sum[x2][y2] - sum[x2][y1-1];
        //else if(y1 == 0)
        //  ans = sum[x2][y2] - sum[x1-1][y2];

        cout<<ans<<endl;
    } 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_38293125/article/details/79711718
今日推荐