codeforces 330A

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;  
}  

 

  

 

posted @ 2013-07-21 09:39  JKXQJ  阅读(281)  评论(0编辑  收藏  举报