Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define N 205
- using namespace std;
- int n,m,a[N][N];
- int st[N][N],dr[N][N],ss[N][N],js[N][N];
- int numar(int L1,int L2) /// Numara formatiunile
- {
- if(L1<2||L2<2) /// Daca cel putin 1 e mai mica decat 2, nu exista formatiuni
- return 0;
- if(L1<L2) /// Vrem ca in L1 sa memoram lungimea cea mai mare
- swap(L1,L2);
- int nr=0,i=L1,j=L2;
- if(i<2*j) /// Daca L1 e mai mica decat dublul lui L2
- j=i/2; /// atunci faxcem L2 jumatate din L1
- if(j>1) /// Daca exista formatiuni
- nr+=j-1; /// atunci le numaram
- if(L2/2>1) /// Daca putem forma formatiuni si invers
- nr+=L2/2-1; /// atunci le numaram si pe acestea
- return nr;
- }
- int main()
- {
- cin>>n>>m;
- for(int i=0;i<n;++i)
- for(int j=0;j<m;++j)
- cin>>a[i][j];
- int k;
- for(int i=0;i<n;++i)
- for(int j=0;j<m;++j)
- if(a[i][j])
- {
- k=j;while(k>=0&&a[i][k]) ++st[i][j],--k; /// Stanga
- k=j;while(k<=m&&a[i][k]) ++dr[i][j],++k; /// Dreapta
- k=i;while(k>=0&&a[k][j]) ++ss[i][j],--k; /// Sus
- k=i;while(k<=n&&a[k][j]) ++js[i][j],++k; /// Jos
- }
- int sol=0;
- for(int i=0;i<n;++i)
- for(int j=0;j<m;++j)
- if(a[i][j]==1)
- {
- sol+=numar(st[i][j],ss[i][j]); /// Stanga-Sus
- sol+=numar(st[i][j],js[i][j]); /// Stanga-Jos
- sol+=numar(dr[i][j],ss[i][j]); /// Dreapta-Sus
- sol+=numar(dr[i][j],js[i][j]); /// Dreapta-Jos
- }
- cout<<sol;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement