Pagini recente » Cod sursa (job #618094) | Cod sursa (job #2475622) | Cod sursa (job #885270) | Cod sursa (job #1579042) | Cod sursa (job #636961)
Cod sursa(job #636961)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
#define MAXN 1010
inline int max(int i, int j)
{
return i > j ? i : j;
}
//<parsing>
FILE* fin = fopen("dreptpal.in", "r");
const unsigned maxb = 8192;
char buf[maxb];
unsigned ptr = maxb;
inline unsigned getInt()
{
while(buf[ptr] < '0' || '9' < buf[ptr]) {
if(++ptr >= maxb) {
fread(buf, maxb, 1, fin), ptr=0;
}
}
unsigned nr = 0;
while('0' <= buf[ptr] && buf[ptr] <= '9') {
nr = nr * 10 + buf[ptr] - '0';
if(++ptr >= maxb) {
fread(buf, maxb, 1, fin), ptr=0;
}
}
return nr;
}
//</parsing>
FILE* fout = fopen("dreptpal.out", "w");
int n, m, mat[MAXN][MAXN], pali[MAXN][MAXN];
int main()
{
n = getInt(), m = getInt();
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
mat[i][j] = getInt();
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
while (j - pali[i][j] >= 1 && j + pali[i][j] <= m &&
mat[i][j - pali[i][j]] == mat[i][j + pali[i][j]]) {
++pali[i][j];
}
pali[i][j] = (pali[i][j] << 1) - 1;
}
}
int maxpali = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
int up = 0, down = 0;
while (pali[i - up][j] >= pali[i][j]) {
++up;
}
while (pali[i + down][j] >= pali[i][j]) {
++down;
}
maxpali = max(maxpali, (up + down - 1) * pali[i][j]);
}
}
fprintf (fout, "%d\n", maxpali);
fclose(fin);
fclose(fout);
return 0;
}