侦察兵(特长生准备)

来源:互联网 发布:anconda tensorflow 编辑:程序博客网 时间:2024/04/30 19:47

题目大意:

给你一个n*n的矩阵,求(x,y)左上角和右下角的值得和。n<1000 有t个(x,y),t<1000;

思路:

不可以直接暴力,因为要枚举三个变量,就是n^3,一定会超时,然后就想到二维的前缀和,在搞个后缀和。
去一个点相加就好了,时间O(n^2+n);

程序:

const        maxn=1000;var        a,f,f1:array [0..maxn+1,0..maxn+1] of longint;        i,j,n,m,t,x,y:longint;begin        assign(input,'scout.in'); reset(input);        assign(output,'scout.out'); rewrite(output);        readln(n,m);        for i:=1 to n do        begin         for j:=1 to n do          read(a[i,j]);         readln;        end;        for i:=1 to n do         for j:=1 to n do          f[i,j]:=f[i-1,j]+f[i,j-1]-f[i-1,j-1]+a[i,j];        for i:=n downto 1 do         for j:=n downto 1 do          f1[i,j]:=f1[i+1,j]+f1[i,j+1]-f1[i+1,j+1]+a[i,j];        for i:=1 to m do        begin                readln(x,y);                writeln(f[x-1,y-1]+f1[x+1,y+1]);        end;        close(input); close(output);end.
原创粉丝点击