BZOJ 2901 矩陣求和

2022-04-30 10:27:08 字數 1493 閱讀 7541

time limit: 20 sec  memory limit: 256 mb

submit: 411  solved: 216

[submit][status][discuss]

給出兩個n*n的矩陣,m次詢問它們的積中給定子矩陣的數值和。

第一行兩個正整數n,m。

接下來n行,每行n個非負整數,表示第乙個矩陣。

接下來n行,每行n個非負整數,表示第二個矩陣。

接下來m行,每行四個正整數a,b,c,d,表示詢問第乙個矩陣與第二個矩陣的積中,以第a行第b列與第c行第d列為頂點的子矩陣中的元素和。

對每次詢問,輸出一行乙個整數,表示該次詢問的答案。

3 21 9 8

3 2 0

1 8 3

9 8 4

0 5 15

1 9 6

1 1 3 3

2 3 1 2

661388

【資料規模和約定】

對30%的資料滿足,n <= 100。

對100%的資料滿足,n <= 2000,m <= 50000,輸入資料中矩陣元素 < 100,a,b,c,d <= n。

[submit][status][discuss]

經典題目,然後我忘了怎麼做了,然後就被高一學長教做人了……

不妨設答案為乘積矩陣的第a行到第c行,第b行到第d行的元素之和。

$$\sum_^ \sum_^ \sum_^ a_b_$$

$$\sum_^ \sum_^ \sum_^ a_b_$$

$$\sum_^ (\sum_^}) (\sum_^})$$

然後對兩個矩陣進行字首和預處理,每次查詢的時候暴力列舉k就可以。卡常技巧也是很重要的……

1 #include 2

3#define siz (1 << 20)

4#define frd fread(hd = buf, 1, siz, stdin)

5#define gtc (hd == tl ? (frd, *hd++) : *hd++)67

char

buf[siz];

8char *hd = buf +siz;

9char *tl = buf +siz;

1011 inline int nextint(void)12

2223

#undef siz

24#undef frd

25#undef gtc

2627

#define mxn 2005

28#define mxm 50005

29#define lnt long long

30#define rnt register int

3132

intn, m;

33lnt a[mxn][mxn];

34lnt b[mxn][mxn];

3536 signed main(void)37

74 }

@author: yousiki

BZOJ 2901 矩陣求和

bzoj 2901 矩陣求和 字首和 給出兩個n n的矩陣,m次詢問它們的積中給定子矩陣的數值和。第一行兩個正整數n,m。接下來n行,每行n個非負整數,表示第乙個矩陣。接下來n行,每行n個非負整數,表示第二個矩陣。接下來m行,每行四個正整數a,b,c,d,表示詢問第乙個矩陣與第二個矩陣的積中,以第a...

BZOJ 2901 矩陣求和 字首和

time limit 20 sec memory limit 256 mb submit 512 solved 289 submit status discuss 給出兩個n n的矩陣,m次詢問它們的積中給定子矩陣的數值和。第一行兩個正整數n,m。接下來n行,每行n個非負整數,表示第乙個矩陣。接下來...

輸入掛(bzoj 2901 矩陣求和)

很少用輸入掛,以為不超時就好了,但是這題貌似不用過不去啊 只好拿出來用了,當個模板 原理是用getchar 讀入會比用scanf快一些 int read while ch 0 ch 9 x x 10 ch 0 ch getchar return x f time limit 20 sec memor...