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; }