Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- ifstream cin("mostenire.in");
- ofstream cout("mostenire.out");
- int n,m;
- long long sol;
- char s[1005];
- bool col[1005];
- int v[1005],l[105][1005],c[105][1005],lst[1005];
- int main()
- {
- cin>>n>>m;
- for(int i=1;i<=n;++i)
- {
- cin>>(s+1);
- for(int j=1;j<=m;++j)
- {
- if(s[j]=='0')
- continue;
- l[i][j]=l[i-1][j]+1;
- }
- for(int j=m;j>=1;--j)
- {
- if(s[j]=='0')
- continue;
- c[i][j]=c[i][j+1]+1;
- }
- }
- for(int i=1;i<=n;++i)
- {
- for(int j=i+2;j<=n;++j)
- {
- for(int k=1;k<=m;++k)
- {
- col[k]=(l[j][k]-l[i-1][k]==j-i+1);
- v[k]=v[k-1]+col[k];
- }
- int poz=0;
- for(int k=1;k<=m;++k)
- {
- lst[k]=poz;
- if(l[j][k]-l[i-1][k]!=j-i+1)
- poz=k;
- }
- poz=1;
- for(int k=1;k<=m;++k)
- {
- if(!col[k])
- continue;
- int val=min(c[i][k],c[j][k]);
- while(poz<k+val&&lst[poz]<k)
- ++poz;
- if(poz<k+val)
- sol+=v[k+val-1]-v[poz-1];
- }
- }
- }
- cout<<sol<<'\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement