https://www.lydsy.com/JudgeOnline/problem.php?id=2901
挺好玩的一道线性代数题
让我这个没学过线性代数的人
更加理解了矩阵乘法
我感觉是测评机今天晚上有点问题
代码应该不能再优化了
已经相当完美了
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e3;
inline void read(ll &x){char ch;bool ok;
for(ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if(ch=='-') ok=1;
for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok) x=-x;}
ll A[N+10][N+10],B[N+10][N+10];
int main(){
ll n,m;
cin>>n>>m;
for(ll i=1;i<=n;++i)
for(ll j=1;j<=n;++j){
read(A[i][j]);
A[i][j]+=A[i-1][j];
}
for(ll i=1;i<=n;++i)
for(ll j=1;j<=n;++j){
read(B[i][j]);
B[i][j]+=B[i][j-1];
}
while(m--){
ll a,b,c,d;
read(a),read(b),read(c),read(d);
if(a>c) a^=c^=a^=c;
if(b>d) b^=d^=b^=d;
ll ans=0;
for(ll i=1;i<=n;++i)
ans+=(A[c][i]-A[a-1][i])*(B[i][d]-B[i][b-1]);
printf("%lld\n",ans);
}
}