Advertisement
Guest User

Untitled

a guest
Aug 16th, 2011
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.40 KB | None | 0 0
  1. program solution;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {MODE DELPHI}
  5. {$MAXSTACKSIZE 1000000000}
  6. {O-,R+,Q+}
  7. {$O+,R-,Q-}
  8.  
  9. uses
  10.   SysUtils,
  11.   Math;
  12.  
  13. const
  14.   sz = 10;
  15.  
  16. var
  17.   n, m, k, ans, x, y, w, h, num1, num2, i, j, z : integer;
  18.   a, g : array[0..101, 0..101] of integer;
  19.  
  20. function gcd(a, b : integer) : integer;
  21. var c : integer;
  22. begin
  23.   while b > 0 do begin
  24.     c := b;
  25.     b := a mod b;
  26.     a := c;
  27.   end;
  28.   result := a;
  29. end;
  30.  
  31. begin
  32.   //assign(input, 'input.txt'); reset(input);
  33.   //assign(output, 'output.txt'); rewrite(output);
  34.   read(n, m, k);
  35.   dec(n);
  36.   dec(m);
  37.   for i := 0 to n do
  38.     for j := 0 to m do
  39.       read(a[i, j]);
  40.   for i := 0 to n do begin
  41.     j := 0;
  42.     while j <= m do begin
  43.       for z := j to min(j + sz - 1, m) do
  44.         g[i, j div sz] := gcd(g[i, j div sz], a[i, z]);
  45.       j := j + sz;
  46.     end;
  47.   end;
  48.   for i := 1 to k do begin
  49.     read(x, y, h, w);
  50.     ans := 0;
  51.     for j := x to x + h - 1 do begin
  52.       num1 := y div sz;
  53.       num2 := (y + w - 1) div sz;
  54.       if num1 = num2 then begin
  55.         for z := y to y + w - 1 do
  56.           ans := gcd(ans, a[j, z]);
  57.         continue;
  58.       end;
  59.       for z := num1 + 1 to num2 - 1 do
  60.         ans := gcd(ans, g[j, z]);
  61.       for z := y to num1 * sz + sz - 1 do
  62.         ans := gcd(ans, a[j, z]);
  63.       for z := num2 * sz to y + w - 1 do
  64.         ans := gcd(ans, a[j, z]);
  65.     end;
  66.     writeln(ans);
  67.   end;
  68. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement