VBOARD - Bàn cờ

Tác giả: ladpro98

Ngôn ngữ: Pascal

program vboard;
uses    math;
const   fi='';
        maxN = 505;
var     fw,fb,a:array[0..maxN,0..maxN] of longint;
        n,q,i,x,y,u,v:longint;
        inp:text;
procedure input;
var     i,j:longint;
begin
        assign(inp,fi);
        reset(inp);
        readln(inp,n);
        for i:=1 to n do
        begin
                for j:=1 to n do
                read(inp,a[i,j]);
                readln(inp);
        end;
        readln(inp,q);
end;

function isWhite(i,j:longint):boolean;
begin
        if (odd(i) and odd(j))
        or (not odd(i)) and (not odd(j))
        then exit(true);
        exit(false);
end;

procedure init;
var     i,j:longint;
begin
      for i:=1 to n do
        for j:=1 to n do
        begin

                fw[i,j]:=fw[i-1,j]+fw[i,j-1]-fw[i-1,j-1];
                fb[i,j]:=fb[i-1,j]+fb[i,j-1]-fb[i-1,j-1];
                if isWhite(i,j) then
                inc(fw[i,j],a[i,j])
                else
                inc(fb[i,j],a[i,j]);
        end;
end;

function query(i,j,m,n:longint):longint;
var     res,w,b:longint;
begin
        w:=fw[m,n]+fw[i-1,j-1]-fw[i-1,n]-fw[m,j-1];
        b:=fb[m,n]+fb[i-1,j-1]-fb[i-1,n]-fb[m,j-1];
        exit(abs(w-b));
end;

begin
        input;
        init;
        for i:=1 to q do
        begin
                readln(inp,x,y,u,v);
                writeln(query(x,y,u,v));
        end;
        close(inp);
end.

Download