Advertisement
a53

cntSQ

a53
Jan 3rd, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. #include <fstream>
  2. #define N 1000
  3. using namespace std;
  4. int n,m,k;
  5. char a[N][N];
  6. int LDL[N][N],CDL[N][N],LRU[N][N],CRU[N][N];
  7.  
  8. int main()
  9. {
  10. ifstream f("cntsq.in");
  11. f>>n>>m;
  12. for(int i=0;i<n;++i)
  13. f>>a[i];
  14. f.close();
  15. for(int i=0;i<n;++i)
  16. for(int j=0;j<m;++j)
  17. {
  18. if(a[i][j]=='1') /// lungimea secventei de 1 de pe linia i ce se termina la coloana j de la stanga
  19. {k=j;while(a[i][k--]=='1') ++LDL[i][j];}
  20. if(a[i][j]=='1') /// lungimea secventei de 1 de pe coloana j ce se termina la linia i de sus
  21. {k=i;while(a[k--][j]=='1') ++CDL[i][j];}
  22. if(a[i][j]=='1') /// lungimea secventei de 1 de pe linia i ce incepe la coloana j si continua in dreapta
  23. {k=j;while(a[i][k++]=='1') ++LRU[i][j];}
  24. if(a[i][j]=='1') /// lungimea secventei de 1 de pe coloana j ce incepe la linia i si continua in jos
  25. {k=i;while(a[k++][j]=='1') ++CRU[i][j];}
  26. }
  27. int MIN,NR=0;
  28. /// Avand aceste matrici calculate se va cauta pentru fiecare (i,j) toate (i',j') cu proprietatea
  29. /// ca i-i'=j-j',i'<=i si min(LDL[i][j],CDL[i][j],LRU[i'][j'],CRU[i'][j'])>=i-i'.
  30. for(int i=0;i<n;++i) /// Cautam patratele
  31. for(int j=0;j<m;++j)
  32. if(a[i][j]=='1')
  33. for(int ii=i,jj=j;ii>=0&&jj>=0;--ii,jj=j-(i-ii))
  34. {
  35. MIN=min(min(LDL[i][j],CDL[i][j]),min(LRU[ii][jj],CRU[ii][jj]));
  36. if(MIN>i-ii)
  37. ++NR;
  38. }
  39. ofstream g("cntsq.out");
  40. g<<NR<<'\n';
  41. g.close();
  42. return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement