#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
class VegetableField {
public : int biggestPlot( vector < string> ) ;
} ;
template < class T> inline void checkmax( T & a, T b) { if ( a< b) a= b; }
int cnt[ 256 ] ;
int VegetableField:: biggestPlot ( vector < string> field) {
/*
In this problem we are asked to find a rectangle, which is
formed with (at most two) different characters and also have
the biggest area. As the given plot is relatively small (20x20),
we can just generate all possible rectangles and choose the
biggest one.
This bruteforce solution has time complexity of O(R^3+C^3), where
R and C are the numbers of rows and columns respectively.
*/
int i, j, k, l, m, n;
int R = field.size ( ) , C = field[ 0 ] .size ( ) ;
int answer = 0 , diff;
for ( int i= 0 ; i< R; i++ ) for ( int j= 0 ; j< C; j++ ) {
/*
These two loops will get all the top-left possible corners
of all rectangles.
*/
for ( int k= i; k< R; k++ ) for ( int l= j; l< C; l++ ) {
/*
These two loops will get all the down-right possible
corners of all rectangles.
Now the rectangle is (i, j), (k, l), where the first
pair is top-left corner and the other one -
the bottom-right.
*/
diff= 0 ;
memset ( cnt, 0 , sizeof ( cnt) ) ;
for ( m= i; m<= k; ++ m) for ( int n= j; n<= l; ++ n) {
/*
Counting the different number of characters is easy
through the global array cnt[].
*/
if ( ++ cnt[ ( int ) field[ m] [ n] ] == 1 ) {
if ( ++ diff> 2 ) break ;
}
}
/*
The rectangle is proper iff the number of different
chars is at most 2. If so update if it is bigger than
the last one.
*/
if ( diff<= 2 ) {
checkmax( answer, ( k- i+ 1 ) * ( l- j+ 1 ) ) ;
}
}
}
return answer;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFZlZ2V0YWJsZUZpZWxkIHsKICAgIHB1YmxpYzogaW50IGJpZ2dlc3RQbG90KHZlY3RvciA8c3RyaW5nPik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQgY2hlY2ttYXgoIFQgJmEsIFQgYikgeyBpZihhPGIpIGE9YjsgfQoKaW50IGNudFsyNTZdOwoKaW50IFZlZ2V0YWJsZUZpZWxkOjpiaWdnZXN0UGxvdCh2ZWN0b3IgPHN0cmluZz4gZmllbGQpIHsKICAgIC8qCiAgICBJbiB0aGlzIHByb2JsZW0gd2UgYXJlIGFza2VkIHRvIGZpbmQgYSByZWN0YW5nbGUsIHdoaWNoIGlzCiAgICBmb3JtZWQgd2l0aCAoYXQgbW9zdCB0d28pIGRpZmZlcmVudCBjaGFyYWN0ZXJzIGFuZCBhbHNvIGhhdmUKICAgIHRoZSBiaWdnZXN0IGFyZWEuIEFzIHRoZSBnaXZlbiBwbG90IGlzIHJlbGF0aXZlbHkgc21hbGwgKDIweDIwKSwKICAgIHdlIGNhbiBqdXN0IGdlbmVyYXRlIGFsbCBwb3NzaWJsZSByZWN0YW5nbGVzIGFuZCBjaG9vc2UgdGhlCiAgICBiaWdnZXN0IG9uZS4KCiAgICBUaGlzIGJydXRlZm9yY2Ugc29sdXRpb24gaGFzIHRpbWUgY29tcGxleGl0eSBvZiBPKFJeMytDXjMpLCB3aGVyZQogICAgUiBhbmQgQyBhcmUgdGhlIG51bWJlcnMgb2Ygcm93cyBhbmQgY29sdW1ucyByZXNwZWN0aXZlbHkuCiAgICAqLwogICAgaW50IGksIGosIGssIGwsIG0sIG47CiAgICBpbnQgUiA9IGZpZWxkLnNpemUoKSwgQyA9IGZpZWxkWzBdLnNpemUoKTsKICAgIGludCBhbnN3ZXIgPSAwLCBkaWZmOwogICAgZm9yKGludCBpPTA7IGk8UjsgaSsrKSBmb3IoaW50IGo9MDsgajxDOyBqKyspIHsKICAgICAgICAvKgogICAgICAgIFRoZXNlIHR3byBsb29wcyB3aWxsIGdldCBhbGwgdGhlIHRvcC1sZWZ0IHBvc3NpYmxlIGNvcm5lcnMKICAgICAgICBvZiBhbGwgcmVjdGFuZ2xlcy4KICAgICAgICAqLwogICAgICAgIGZvcihpbnQgaz1pOyBrPFI7IGsrKykgZm9yKGludCBsPWo7IGw8QzsgbCsrKSB7CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgIFRoZXNlIHR3byBsb29wcyB3aWxsIGdldCBhbGwgdGhlIGRvd24tcmlnaHQgcG9zc2libGUKICAgICAgICAgICAgY29ybmVycyBvZiBhbGwgcmVjdGFuZ2xlcy4KCiAgICAgICAgICAgIE5vdyB0aGUgcmVjdGFuZ2xlIGlzIChpLCBqKSwgKGssIGwpLCB3aGVyZSB0aGUgZmlyc3QKICAgICAgICAgICAgcGFpciBpcyB0b3AtbGVmdCBjb3JuZXIgYW5kIHRoZSBvdGhlciBvbmUgLQogICAgICAgICAgICB0aGUgYm90dG9tLXJpZ2h0LgogICAgICAgICAgICAqLwogICAgICAgICAgICBkaWZmPTA7CiAgICAgICAgICAgIG1lbXNldChjbnQsIDAsIHNpemVvZihjbnQpKTsKICAgICAgICAgICAgZm9yKG09aTsgbTw9azsgKyttKSBmb3IoaW50IG49ajsgbjw9bDsgKytuKSB7CiAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgQ291bnRpbmcgdGhlIGRpZmZlcmVudCBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyBlYXN5CiAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBnbG9iYWwgYXJyYXkgY250W10uCiAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgaWYoKytjbnRbKGludClmaWVsZFttXVtuXV09PTEpIHsKICAgICAgICAgICAgICAgICAgICBpZigrK2RpZmY+MikgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyoKICAgICAgICAgICAgVGhlIHJlY3RhbmdsZSBpcyBwcm9wZXIgaWZmIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50CiAgICAgICAgICAgIGNoYXJzIGlzIGF0IG1vc3QgMi4gSWYgc28gdXBkYXRlIGlmIGl0IGlzIGJpZ2dlciB0aGFuCiAgICAgICAgICAgIHRoZSBsYXN0IG9uZS4KICAgICAgICAgICAgKi8KICAgICAgICAgICAgaWYoZGlmZjw9MikgewogICAgICAgICAgICAgICAgY2hlY2ttYXgoYW5zd2VyLCAoay1pKzEpKihsLWorMSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGFuc3dlcjsKfQo=
compilation info
prog.cpp: In member function ‘int VegetableField::biggestPlot(std::vector<std::basic_string<char> >)’:
prog.cpp:25:9: warning: unused variable ‘i’ [-Wunused-variable]
int i, j, k, l, m, n;
^
prog.cpp:25:12: warning: unused variable ‘j’ [-Wunused-variable]
int i, j, k, l, m, n;
^
prog.cpp:25:15: warning: unused variable ‘k’ [-Wunused-variable]
int i, j, k, l, m, n;
^
prog.cpp:25:18: warning: unused variable ‘l’ [-Wunused-variable]
int i, j, k, l, m, n;
^
prog.cpp:25:24: warning: unused variable ‘n’ [-Wunused-variable]
int i, j, k, l, m, n;
^
/usr/lib/gcc/i486-linux-gnu/4.8/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: error: ld returned 1 exit status
stdout