#include #define MAXN 100 /* mapa a pole pro pocitani t[i][j] */ int a[MAXN][MAXN], t[MAXN][MAXN]; /* rozmery mapy */ int m,n; /* parametry prozatimniho nejlepsiho reseni */ int maxo, maxi1, maxi2, maxi3, maxj1, maxj2, maxj3; /* funkce vracejici minimum */ inline long min(long a, long b) { return (a < b) ? a : b; } int main() { /* Nacteni vstupu */ scanf("%d %d", &m, &n); for (int i=0;i maxo) maxo = t[i][j], maxi1 = maxi2 = i + 1, maxi3 = i - maxo + 2, maxj1 = j - maxo + 2, maxj2 = maxj3 = j + 1; } /* Hledani maximalniho trojuhelnika - levy dolni roh */ for (int i=0;i=0;j--) { t[i][j] = i==0||j==n-1?a[i][j]:a[i][j]*(min(t[i-1][j],t[i][j+1])+1); if (t[i][j] > maxo) maxo = t[i][j], maxi1 = maxi2 = i + 1, maxi3 = i - maxo + 2, maxj1 = maxj3 = j + 1, maxj2 = j + maxo; } /* Hledani maximalniho trojuhelnika - pravy horni roh */ for (int i=m-1;i>=0;i--) for (int j=0;j maxo) maxo = t[i][j], maxi1 = maxi2 = i + 1, maxi3 = i + maxo, maxj1 = j - maxo + 2, maxj2 = maxj3 = j + 1; } /* Hledani maximalniho trojuhelnika - levy horni roh */ for (int i=m-1;i>=0;i--) for (int j=n-1;j>=0;j--) { t[i][j] = i==m-1||j==n-1?a[i][j]:a[i][j]*(min(t[i+1][j],t[i][j+1])+1); if (t[i][j] > maxo) maxo = t[i][j], maxi1 = maxi2 = i + 1, maxi3 = i + maxo, maxj1 = maxj3 = j + 1, maxj2 = j + maxo; } printf("Nejvetsi stavba ma vrcholy bodech (%d,%d), (%d,%d) a (%d,%d).\n", maxi1, maxj1, maxi2, maxj2, maxi3, maxj3); return 0; }