https://www.luogu.com.cn/problem/T311446
#include <bits/stdc++.h>
using namespace std;
vector <pair <int, int> > L;
vector <pair <int, int> > C;
int S;
pair <int, int> tmpBu;
constexpr int M = 1005;
char cityMap[M][M];
int lNum, cNum, sNum;
int n, m, tmp = 2;
bool flag = true;
inline bool cmp(pair <int, int> fst, pair <int, int> snd) {
return fst.first <= snd.first;
}
int main(int argc, char* argv[]) {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> m >> n;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j)
cin >> cityMap[i][j];
}
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
tmp = 2, flag = false;
if (cityMap[i][j] and cityMap[i][j + 1 >= n ? n - 1 : j + 1]) {
while (cityMap[i][++j])
++tmp;
for (int k = 0; k < L.size(); ++k) {
if (L[k].first == tmp)
L[k].second++, flag = true;
}
if (!flag) {
tmpBu.first = tmp;
tmpBu.second = 1;
L.push_back(tmpBu);
}
}
else if (cityMap[i][j - 1] == 1 &&
cityMap[i + 1 >= m ? m - 1 : i + 1][j - 1] == 0 &&
cityMap[abs(i - 1)][j - 1] == 0) ++S;
}
}
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
tmp = 2, flag = false;
if (cityMap[i + 1][j] && cityMap[i][j]) {
while (cityMap[++i][j])
++tmp;
for (int k = 0; k < C.size(); ++k) {
if (C[k].first == tmp)
C[k].second++, flag = true;
}
if (!flag) {
tmpBu.first = tmp;
tmpBu.second = 1;
C.push_back(tmpBu);
}
}
}
}
cout << "S " << S << '\n';
sort(L.begin(), L.end(), cmp);
sort(C.begin(), C.end(), cmp);
for (int i = 0; i < L.size(); ++i)
cout << "L " << L[i].first << ' ' << L[i].second << '\n';
for (int i = 0; i < C.size(); ++i)
cout << "C " << C[i].first << ' ' << C[i].second << '\n';
return 0;
}