Advertisement
laur_rdu

EasyOCR

Feb 28th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. ifstream fin("easyocr.in");
  6. ofstream fout("easyocr.out");
  7. int n, m, a[1005][1005], cif[12], arie;
  8. short int di[] ={-1,-1,-1, 0,  0, 1, 1, 1};
  9. short int dj[] ={-1, 0, 1, -1,  1, -1, 0, -1};
  10. bool ok(int i, int j)
  11. {
  12.     if(i<1 ||j<1 || i>n || j>m)
  13.         return 0;
  14.     return 1;
  15. }
  16. void fillu(int x0, int y0, int conti)
  17. {
  18.    a[x0][y0] = conti;
  19.    arie++;
  20.    for(int k = 0; k<8; k++)
  21.    {
  22.        int x = x0 + di[k];
  23.        int y = y0 + dj[k];
  24.        if(ok(x, y) && a[x][y]==1)
  25.             fillu(x, y, conti);
  26.    }
  27. }
  28. int main()
  29. {
  30.     int i, j, conti = 1, ok;
  31.     char ch;
  32.     fin>>n>>m;
  33.     fin.get();
  34.     for(i = 1; i<=n; i++)
  35.     {
  36.         for(j = 1; j<=m; j++)
  37.         {
  38.             fin.get(ch);
  39.             a[i][j] = ch -'0';
  40.         }
  41.         fin.get();
  42.     }
  43.     for(i = 1; i<=n; i++)
  44.     {
  45.         for(j = 1; j<=m; j++)
  46.         {
  47.             if(a[i][j] == 1)
  48.             {
  49.                 conti++;
  50.                 arie = 0;
  51.                 fillu(i, j, conti);
  52.                 ok = 0;
  53.                 switch(arie)
  54.                 {
  55.                 case 20:
  56.                     cif[0]++;
  57.                     break;
  58.                 case 8:
  59.                     cif[1]++;
  60.                     break;
  61.                 case 14:
  62.                     cif[4]++;
  63.                     break;
  64.                 case 11:
  65.                     cif[7]++;
  66.                     break;
  67.                 case 23:
  68.                     cif[8]++;
  69.                     break;
  70.                 default:
  71.                     ok = 1;
  72.                     break;
  73.                 }
  74.                 if(ok)
  75.                 {
  76.                     if(arie == 19)
  77.                     {
  78.                         if(a[i+1][j])
  79.                             cif[5]++;
  80.                         else
  81.                         {
  82.                             if(a[i+4][j])
  83.                                 cif[2]++;
  84.                             else
  85.                                 cif[3]++;
  86.                         }
  87.                     }
  88.                     else
  89.                     {
  90.                         if(a[i+4][j])
  91.                             cif[6]++;
  92.                         else
  93.                             cif[9]++;
  94.                     }
  95.                 }
  96.             }
  97.         }
  98.     }
  99.     fout<<conti-1<<'\n';
  100.     for(i = 0; i<10; i++)
  101.     {
  102.         if(cif[i])
  103.             fout<<i<<" "<<cif[i]<<" ";
  104.     }
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement