Advertisement
Guest User

IOI 2006 B Pyramid

a guest
Jun 17th, 2015
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. /*
  2.     Solution by Zalkar aka KGZ
  3. */
  4.  
  5. #include <bits/stdc++.h>
  6.  
  7. #define mp make_pair
  8. #define pb push_back
  9. #define sz(s) (int) s.size ()
  10. #define all(s) s.begin (), s.end ()
  11.  
  12. #define filename "file"
  13.  
  14. using namespace std;
  15.  
  16. const int N = 1500;
  17. const int INF = 1e9 + 7;
  18.  
  19. int a[N][N], n ,m, n1, m1, n2, m2, sum[N][N], ans;
  20.  
  21. int getsum (int lx, int ly, int rx, int ry) {
  22.     return sum[rx][ry] - sum[lx - 1][ry] - sum[rx][ly - 1] + sum[lx - 1][ly - 1];
  23. }
  24.  
  25. int main ()
  26. {
  27.     int x1, y1, x2, y2;
  28.  
  29.     scanf ("%d %d %d %d %d %d", &m, &n, &m1, &n1, &m2, &n2);
  30.  
  31.     for (int c = 1; c <= n; c++) {
  32.         for (int i = 1; i <= m; i++) {
  33.             scanf ("%d", &a[c][i]);
  34.             sum[c][i] = a[c][i];
  35.             sum[c][i] += sum[c - 1][i];
  36.             sum[c][i] += sum[c][i - 1];
  37.             sum[c][i] -= sum[c - 1][i - 1];
  38.         }
  39.     }
  40.  
  41.     for (int c = 1; c <= n - n1 + 1; c++) {
  42.         for (int i = 1; i <= m - m1 + 1; i++) {
  43.                
  44.             int sumofpyramid = getsum (c, i, c + n1 - 1, i + m1 - 1);
  45.             int mn = INF;
  46.             int curx, cury;
  47.  
  48.             for (int j = c + 1; j <= (c + n1 - 2) - n2 + 1; j++) {
  49.                 for (int k = i + 1; k <= (i + m1 - 2) - m2 + 1; k++) {
  50.  
  51.                     if (getsum (j, k, j + n2 - 1, k + m2 - 1) < mn) {
  52.                         mn = getsum (j, k, j + n2 - 1, k + m2 - 1);
  53.                         curx = j; cury = k;
  54.                     }
  55.                 }
  56.             }
  57.  
  58.             sumofpyramid -= mn;
  59.  
  60.             if (sumofpyramid > ans) {
  61.                 ans = sumofpyramid;
  62.                 x1 = c; y1 = i;
  63.                 x2 = curx; y2 = cury;
  64.             }
  65.         }
  66.     }
  67.  
  68.     printf("%d %d\n", y1, x1);
  69.     printf("%d %d\n", y2, x2);
  70.  
  71.  
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement