Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #define N 1000
- using namespace std;
- int n,m,k;
- char a[N][N];
- int LDL[N][N],CDL[N][N],LRU[N][N],CRU[N][N];
- int main()
- {
- ifstream f("cntsq.in");
- f>>n>>m;
- for(int i=0;i<n;++i)
- f>>a[i];
- f.close();
- for(int i=0;i<n;++i)
- for(int j=0;j<m;++j)
- {
- if(a[i][j]=='1') /// lungimea secventei de 1 de pe linia i ce se termina la coloana j de la stanga
- {k=j;while(a[i][k--]=='1') ++LDL[i][j];}
- if(a[i][j]=='1') /// lungimea secventei de 1 de pe coloana j ce se termina la linia i de sus
- {k=i;while(a[k--][j]=='1') ++CDL[i][j];}
- if(a[i][j]=='1') /// lungimea secventei de 1 de pe linia i ce incepe la coloana j si continua in dreapta
- {k=j;while(a[i][k++]=='1') ++LRU[i][j];}
- if(a[i][j]=='1') /// lungimea secventei de 1 de pe coloana j ce incepe la linia i si continua in jos
- {k=i;while(a[k++][j]=='1') ++CRU[i][j];}
- }
- int MIN,NR=0;
- /// Avand aceste matrici calculate se va cauta pentru fiecare (i,j) toate (i',j') cu proprietatea
- /// ca i-i'=j-j',i'<=i si min(LDL[i][j],CDL[i][j],LRU[i'][j'],CRU[i'][j'])>=i-i'.
- for(int i=0;i<n;++i) /// Cautam patratele
- for(int j=0;j<m;++j)
- if(a[i][j]=='1')
- for(int ii=i,jj=j;ii>=0&&jj>=0;--ii,jj=j-(i-ii))
- {
- MIN=min(min(LDL[i][j],CDL[i][j]),min(LRU[ii][jj],CRU[ii][jj]));
- if(MIN>i-ii)
- ++NR;
- }
- ofstream g("cntsq.out");
- g<<NR<<'\n';
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement