C题Compute's Matrix

原题链接


解题思路

已知左上角坐标(x1,y1)和右下角坐标(x2,y2),构成子矩阵如下:

(x1,y1) (x1,y1+1) (x1,y1+2) ... (x1,y2)
(x1+1,y1) (x1+1,y1+1) (x1+1,y1+2) ... (x1+1,y2)
(x1+2,y1) (x1+2,y1+1) (x1+2,y1+2) ... (x1+2,y2)
... ... ... ... ...
(x2,y1) (x2,y1+1) (x2,y1+2) ... (x2,y2)

对第x行累加:

再累加各行:

图片说明

图片说明

其中
图片说明
图片说明

取余输出即可


AC代码

#include <iostream>
using namespace std;

const long long M = 1e9 + 7;
int main(void)
{
    int t;
    long long n, a, b, c, d, x, y, r;
    cin >> t;
    while (t--)
    {
        cin >> n >> a >> b >> c >> d;
        x = (a + c) * (c - a + 1) / 2;
        y = (b + d) * (d - b + 1) / 2;
        x %= M;
        y %= M;
        r = x * y;
        r %= M;
        cout << r << endl;
    }
    return 0;
}