题目大意:
mxy在一个N*N大小矩形的游戏中当侦察兵。给出每个单位的怪物数量a[i,j],以及T个时刻,mxy的坐标[x[k],y[k]],求出以mxy为中心横纵构成一个十字,左上区域跟右上区域的怪物总数(不包括她所在的行列)。
1≤N,T≤1000
1≤a[i,j]≤100
1<=k<=t
1<=i,j<=n
题解:
直接暴力会超时:
所以我们考虑区间和:
sum[i,j]表示第i行前j个格子有多少个怪物。
最后,
ans=∑sum[i,y-1]+∑(sum[j,n]-sum[j,y])
1<=i<=x-1 x+1<=j<=n
var
sum:array [0..1001,0..1001] of longint;
i,j,k,n,t,x,y,ans:longint;
begin
assign(input,'scout.in'); reset(input);
assign(output,'scout.out'); rewrite(output);
readln(n,t);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(x);
sum[i,j]:=sum[i,j-1]+x;
end;
readln;
end;
for k:=1 to t do
begin
readln(x,y);
ans:=0;
for i:=1 to x-1 do
ans:=ans+sum[i,y-1];
for i:=x+1 to n do
ans:=ans+(sum[i,n]-sum[i,y]);
writeln(ans);
end;
close(input); close(output);
end.