Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program solution;
- {$APPTYPE CONSOLE}
- {MODE DELPHI}
- {$MAXSTACKSIZE 1000000000}
- {O-,R+,Q+}
- {$O+,R-,Q-}
- uses
- SysUtils,
- Math;
- const
- sz = 10;
- var
- n, m, k, ans, x, y, w, h, num1, num2, i, j, z : integer;
- a, g : array[0..101, 0..101] of integer;
- function gcd(a, b : integer) : integer;
- var c : integer;
- begin
- while b > 0 do begin
- c := b;
- b := a mod b;
- a := c;
- end;
- result := a;
- end;
- begin
- //assign(input, 'input.txt'); reset(input);
- //assign(output, 'output.txt'); rewrite(output);
- read(n, m, k);
- dec(n);
- dec(m);
- for i := 0 to n do
- for j := 0 to m do
- read(a[i, j]);
- for i := 0 to n do begin
- j := 0;
- while j <= m do begin
- for z := j to min(j + sz - 1, m) do
- g[i, j div sz] := gcd(g[i, j div sz], a[i, z]);
- j := j + sz;
- end;
- end;
- for i := 1 to k do begin
- read(x, y, h, w);
- ans := 0;
- for j := x to x + h - 1 do begin
- num1 := y div sz;
- num2 := (y + w - 1) div sz;
- if num1 = num2 then begin
- for z := y to y + w - 1 do
- ans := gcd(ans, a[j, z]);
- continue;
- end;
- for z := num1 + 1 to num2 - 1 do
- ans := gcd(ans, g[j, z]);
- for z := y to num1 * sz + sz - 1 do
- ans := gcd(ans, a[j, z]);
- for z := num2 * sz to y + w - 1 do
- ans := gcd(ans, a[j, z]);
- end;
- writeln(ans);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement