wanimaru47's diary

プログラミング等々

AOJ 0116

解いたので、何となく載せてみました。
問題

#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <algorithm>
#include <list>
#include <stack>
#include <queue>
using namespace std;

typedef list<int> L;
typedef pair <int,int> P;
typedef vector<int> V;
typedef queue<int> Q;
typedef stack<int> S;
typedef map<string,int> M;

int main()
{
    int H, W;
    
    while (cin >> H >> W, H) {
        char d[H][W];
        int ansW, ansH, ans = 0;
        for (int i = 0; i < H; i++)
            for (int j = 0; j < W; j++)
                cin >> d[i][j];

        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                if (d[i][j] == '.') {
                    ansH = 0;
                    ansW = 9999;
                    while (d[i + ansH][j] == '.' && i + ansH < H) {
                        int m = 0;
                        while (d[i + ansH][j + m] == '.' && j + m < W) m++;
                        ansW = min(ansW, m);
                        ansH++;
                        ans = max(ans, ansW * ansH);
                    }
                }
            }
        }
        cout << ans << endl;
    }
    
    
    return 0;
}