fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int H, W;
  5. vector<string> img;
  6. map<char, vector<string>> font;
  7.  
  8. vector<string> crop(const vector<string>& v, int l, int r) {
  9. vector<string> res(H);
  10. for (int i = 0; i < H; i++) res[i] = v[i].substr(l, r - l + 1);
  11. return res;
  12. }
  13.  
  14. int diff(const vector<string>& a, const vector<string>& b) {
  15. int h = a.size(), w = a[0].size();
  16. int res = 0;
  17. for (int i = 0; i < h; i++)
  18. for (int j = 0; j < w; j++)
  19. res += (a[i][j] != b[i][j]);
  20. return res;
  21. }
  22.  
  23. char recognize(const vector<string>& letter) {
  24. char best = '?';
  25. int bestScore = 1e9;
  26. for (auto& kv : font) {
  27. const auto& tpl = kv.second;
  28. if (tpl.size() != letter.size()) continue;
  29. if (tpl[0].size() != letter[0].size()) continue;
  30. int d = diff(letter, tpl);
  31. if (d < bestScore) {
  32. bestScore = d;
  33. best = kv.first;
  34. }
  35. }
  36. return best;
  37. }
  38.  
  39. int main() {
  40. ios::sync_with_stdio(false);
  41. cin.tie(nullptr);
  42. cin >> W >> H;
  43. img.resize(H);
  44. for (int i = 0; i < H; i++) cin >> img[i];
  45.  
  46. // giả sử đã load font 26 chữ vào font['a'..'z']
  47.  
  48. string res;
  49. int col = 0;
  50. while (col < W) {
  51. int start = col;
  52. while (start < W) {
  53. bool ok = false;
  54. for (int i = 0; i < H; i++) if (img[i][start] == '#') { ok = true; break; }
  55. if (ok) break;
  56. start++;
  57. }
  58. if (start == W) break;
  59. int end = start;
  60. while (end < W) {
  61. bool ok = false;
  62. for (int i = 0; i < H; i++) if (img[i][end] == '#') { ok = true; break; }
  63. if (!ok) break;
  64. end++;
  65. }
  66. vector<string> letter = crop(img, start, end - 1);
  67. res.push_back(recognize(letter));
  68. col = end;
  69. }
  70. cout << res << "\n";
  71. }
  72.  
Success #stdin #stdout 0s 5320KB
stdin
66 22
..................................................................
......#########...................................................
....#############.................................................
...###.##########.................................................
..######....######.........########.............##########........
..#####......#####.......####..######.........##############......
.#####........####......###......#####.......###.##....##.###.....
..............####......###......#####.......#####......#####.....
............######......###.......####.......####.......####......
......############................####..................#####.....
...###########.###.............#######..............#########.....
..################.........######.####..........#############.....
.#######......####.......#####....####........########..#####.....
.#####........####......####......####.......#####......##.##.....
.#####.......#####.....####.......####......#####.......#####.....
.####........#####.....####.......####......####........#####.....
.#####......######.....####......##.##......####........#####.....
.######...########.....#####....######......##.##.....#######.....
..#################....##.##...#######......######..##########....
..#################....##########.#####......###########.########.
....########..#####......#.###....#######......#######....#######.
..................................................................
stdout
???