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