题意:
聚光灯放的位置,如果向左,左边必须有演员,上下右同样,并且这个所放置的位置不能有演员。
思路:
存行,列矩阵, 拿行举例,行判断左右,从0->当前列求和,如果0<当前列 就可以往左照,如果最后一列>当前列,就可以往右放。
#include <iostream>
#include <stdio.h>
using namespace std;
int mp[1005][1005];
int row[1005][1005];
int col[1005][1005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&mp[i][j]);
row[i][j]=row[i][j-1]+mp[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
col[i][j]=col[i-1][j]+mp[i][j];
}
}
/*
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<col[i][j]<<" ";
cout<<endl;
}*/
int sum=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(mp[i][j]==0)
{
if(row[i][j]!=0)
{
sum++;
}
if(row[i][m]!=row[i][j])
{
sum++;
}
if(col[i][j]!=0)
{
sum++;
}
if(col[i][j]!=col[n][j])
{
sum++;
}
}
}
}
cout<<sum<<endl;
return 0;
}