http://codeforces.com/problemset/problem/330/A
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int row[10][10],col[10][10];
char s[10][10];
int main()
{
// freopen("1.txt","r",stdin);
int r,c;
while(scanf("%d%d",&r,&c)!=EOF)
{
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
int ans=0;
for(int i=0; i<r; i++)
{
getchar();
for(int j=0; j<c; j++)
scanf("%c",&s[i][j]);
}
for(int i=0; i<r; i++)
for(int j=0; j<c; j++)
if(s[i][j]=='S')
{
for(int ii=0; ii<c; ii++)
row[i][ii]=1;
for(int jj=0; jj<r; jj++)
col[jj][j]=1;
}
for(int i=0; i<r; i++)
for(int j=0; j<c; j++)
{
if(!row[i][j]||!col[i][j])
ans++;
}
cout<<ans<<endl;
}
return 0;
}
题解:如果一个点有草莓的话,就会限制掉那对应的一行与对应的列,当一个点所处的坐标(x,y)行x,列y都被限制时。就是此点不能去除,不计算该点。所以解法出来了。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
char cmd;
int line[20];
int col[20];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<20;i++){
line[i]=0;
col[i]=0;
}
int a=0,b=0;
for(int i=0;i<n;++i)
for(int j=0;j<m;++j){
cin>>cmd;
if(cmd=='S'){
if(line[i]==0) ++a;
line[i]++;
if(col[j]==0) ++b;
col[j]++;
}
}
cout<<n*m-a*b<<endl;
return 0;
}