Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define all(x) x.begin(), x.end()
- #define sz(x) int(x.size())
- #define endl '\n'
- int n, m;
- int P;
- void solve() {
- cout << "Problem " << ++P << ":\n";
- vector<pair<char, int>> ans;
- vector<vector<char>> grid(n, vector<char>(m));
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- cin >> grid[i][j];
- }
- }
- vector<vector<bool>> vis(n, vector<bool>(m));
- auto valid = [&](int i, int j) {
- return 0 <= i && i < n && 0 <= j && j < m && !vis[i][j];
- };
- function<int(int , int )> dfs = [&](int i, int j) {
- int ans = 1;
- int di = 0, dj = -1;
- for (int _ = 0; _ < 4; _++) {
- int ni = di + i, nj = dj + j;
- if (valid(ni, nj) && grid[i][j] == grid[ni][nj]) {
- vis[ni][nj] = true;
- ans += dfs(ni, nj);
- }
- swap(di, dj);
- if (_ == 1) dj = 1;
- }
- return ans;
- };
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (isalpha(grid[i][j]) && !vis[i][j]) {
- vis[i][j] = true;
- ans.emplace_back(grid[i][j], dfs(i, j));
- }
- }
- }
- sort(all(ans), [](const pair<char, int>& a, const pair<char, int>& b) {
- if (a.second == b.second) return a.first < b.first;
- return a.second > b.second;
- });
- for (pair<char, int>& a : ans) cout << a.first << " " << a.second << endl;
- }
- int main() {
- cin.tie(0), cin.sync_with_stdio(0);
- while (cin >> n >> m, n && m)
- solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement