Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- ifstream fin("easyocr.in");
- ofstream fout("easyocr.out");
- int n, m, a[1005][1005], cif[12], arie;
- short int di[] ={-1,-1,-1, 0, 0, 1, 1, 1};
- short int dj[] ={-1, 0, 1, -1, 1, -1, 0, -1};
- bool ok(int i, int j)
- {
- if(i<1 ||j<1 || i>n || j>m)
- return 0;
- return 1;
- }
- void fillu(int x0, int y0, int conti)
- {
- a[x0][y0] = conti;
- arie++;
- for(int k = 0; k<8; k++)
- {
- int x = x0 + di[k];
- int y = y0 + dj[k];
- if(ok(x, y) && a[x][y]==1)
- fillu(x, y, conti);
- }
- }
- int main()
- {
- int i, j, conti = 1, ok;
- char ch;
- fin>>n>>m;
- fin.get();
- for(i = 1; i<=n; i++)
- {
- for(j = 1; j<=m; j++)
- {
- fin.get(ch);
- a[i][j] = ch -'0';
- }
- fin.get();
- }
- for(i = 1; i<=n; i++)
- {
- for(j = 1; j<=m; j++)
- {
- if(a[i][j] == 1)
- {
- conti++;
- arie = 0;
- fillu(i, j, conti);
- ok = 0;
- switch(arie)
- {
- case 20:
- cif[0]++;
- break;
- case 8:
- cif[1]++;
- break;
- case 14:
- cif[4]++;
- break;
- case 11:
- cif[7]++;
- break;
- case 23:
- cif[8]++;
- break;
- default:
- ok = 1;
- break;
- }
- if(ok)
- {
- if(arie == 19)
- {
- if(a[i+1][j])
- cif[5]++;
- else
- {
- if(a[i+4][j])
- cif[2]++;
- else
- cif[3]++;
- }
- }
- else
- {
- if(a[i+4][j])
- cif[6]++;
- else
- cif[9]++;
- }
- }
- }
- }
- }
- fout<<conti-1<<'\n';
- for(i = 0; i<10; i++)
- {
- if(cif[i])
- fout<<i<<" "<<cif[i]<<" ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement