Pagini recente » Cod sursa (job #460137) | Borderou de evaluare (job #1549456) | Cod sursa (job #3316627) | Cod sursa (job #3310778) | Cod sursa (job #3334201)
#include <iostream>
using namespace std;
int a[205][205];
int zdr[205][205],zjos[205][205];
int sus[205],jos[205],st[205],dr[205];
char s[205];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=1;j<=m;j++){
a[i][j]=s[j-1]-'0';
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int l=i,c=j;
while(a[l][c]==0&&l<=n){
zjos[i][j]++;
l++;
}
l=i,c=j;
while(a[l][c]==0&&c<=m){
zdr[i][j]++;
c++;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==0){
int mn=zdr[i][j];
int mx=mn;
int l=i,c=j;
while(a[l][c]==0&&l<=n){
sus[l]=max(sus[l],mx);
l++;
mn=min(mn,zdr[l][c]);
mx=(l-i+1)*mn;
}
}
}
}
for(int i=n;i>0;i--){
for(int j=1;j<=m;j++){
if(a[i][j]==0){
int mn=zdr[i][j];
int mx=mn;
int l=i,c=j;
while(a[l][c]==0&&l>0){
jos[l]=max(jos[l],mx);
l--;
mn=min(mn,zdr[l][c]);
mx=(i-l+1)*mn;
}
}
}
}
for(int j=1;j<=m;j++){
for(int i=1;i<=n;i++){
if(a[i][j]==0){
int mn=zjos[i][j];
int mx=mn;
int l=i,c=j;
while(a[l][c]==0&&c<=m){
st[c]=max(st[c],mx);
c++;
mn=min(mn,zjos[l][c]);
mx=(c-j+1)*mn;
}
}
}
}
for(int j=m;j>0;j--){
for(int i=1;i<=n;i++){
if(a[i][j]==0){
int mn=zjos[i][j];
int mx=mn;
int l=i,c=j;
while(a[l][c]==0&&c>0){
dr[c]=max(dr[c],mx);
c--;
mn=min(mn,zjos[l][c]);
mx=(j-c+1)*mn;
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) cout<<zdr[i][j]<<" ";
cout<<endl;
}
for(int i=1;i<=m;i++) cout<<dr[i]<<" ";
return 0;
}