BZOJ 2901 矩陣求和

2022-04-29 23:48:09 字數 1483 閱讀 8179

bzoj_2901_矩陣求和_字首和

給出兩個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。

$\sum\limits_^\sum\limits_^\sum\limits_^a_*b_$

$=\sum\limits_^\sum\limits_^a_\sum\limits_^b_$

處理出字首和之後每次o(n)查一遍。

**:

// bzoj-judger-enable-ogay

#include #include #include using namespace std;

typedef long long ll;

int sa[2050][2050],sb[2050][2050],n,m;

char buf[100000],*p1=buf,*p2=buf;

#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?eof:*p1++)

__attribute__((optimize("-o998244353")))int rd()

char pbuf[100000],*pp=pbuf;

__attribute__((optimize("-o998244353")))void push(const char ch)

__attribute__((optimize("-o998244353")))void write(ll x) while(x);

while(top) push(sta[top--]+'0');

push('\n');

}__attribute__((optimize("-o998244353")))ll qu(int x,int y,int z,int w)

__attribute__((optimize("-o998244353")))int main()

} for(i=1;i<=n;i++)

} int y,z,w;

while(m--)

fwrite(pbuf,1,pp-pbuf,stdout);

}

BZOJ 2901 矩陣求和

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

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...