#include <iostream>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
const int maxn = 1007;
char input[maxn][maxn];
int h[maxn], ans[4 * maxn],n,m;
pair<int,int> r[4 * maxn];
int main()
{
int t;
cin >> t;
while (t--) {
cin >> n >> m;
memset(h, 0, sizeof(h));
memset(ans, 0, sizeof(ans));
for (int i = 0; i < n; i++) cin >> input[i];
for (int i = 0; i < n; i++) {
int nTop = -1;
for (int j = 0; j < m; j++) {
if (input[i][j] == '#') {
h[j] = 0;
nTop = -1;
}
else {
h[j]++;
pair<int, int> tmp(j, h[j]);
while (nTop >= 0 && tmp.second <= r[nTop].second) tmp.first = r[nTop--].first;
if (nTop < 0 || tmp.second - tmp.first > r[nTop].second - r[nTop].first) r[++nTop] = tmp;
ans[j - r[nTop].first + 1 + r[nTop].second]++;
}
}
}
int len = n + m;
for (int i = 1; i <= len; i++)
if (ans[i]) cout << ans[i] << " x " << i * 2 <<endl;
}
return 0;
}
12-25
07-15
05-20
05-20
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交