A:
题意:
给出一个矩阵表示蛋糕,矩阵中有毒草莓。我们每次可以选择一行或者一列来吃蛋糕,要保证改行该列不含有毒草莓。问我们能吃到的最多的小蛋糕快
思路:
直接枚举每一行,每一列然后吃,模拟就行。
#include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> #include <string> #include <set> #include <functional> #include <numeric> #include <sstream> #include <stack> #include <map> #include <queue> #define CL(arr, val) memset(arr, val, sizeof(arr)) #define lc l,m,rt<<1 #define rc m + 1,r,rt<<1|1 #define pi acos(-1.0) #define ll __int64 #define L(x) (x) << 1 #define R(x) (x) << 1 | 1 #define MID(l, r) (l + r) >> 1 #define Min(x, y) (x) < (y) ? (x) : (y) #define Max(x, y) (x) < (y) ? (y) : (x) #define E(x) (1 << (x)) #define iabs(x) (x) < 0 ? -(x) : (x) #define OUT(x) printf("%I64d\n", x) #define lowbit(x) (x)&(-x) #define Read() freopen("din.txt", "r", stdin) #define Write() freopen("dout.txt", "w", stdout); #define M 1007 #define N 1007 using namespace std; int n,m; char str[N][N]; bool vt[N][N]; int main() { // Read(); cin>>n>>m; CL(vt,false); for (int i = 0; i < n; ++i) { scanf("%s",str[i]); } int ans = 0; for (int i = 0; i < n; ++i) { int f = 1; int tmp = 0; for (int j = 0; j < m; ++j) { if (str[i][j] == 'S') f = 0; else if (!vt[i][j]) tmp++; } if (f == 1) { ans += tmp; for (int j = 0; j < m; ++j) { vt[i][j] = true; } } } for (int j = 0; j < m; ++j) { int f = 1; int tmp = 0; for (int i = 0; i < n; ++i) { if (str[i][j] == 'S') f = 0; else if (!vt[i][j]) tmp++; } if (f == 1) { ans += tmp; for (int i = 0; i < n; ++i) { vt[i][j] = true; } } } cout << ans << endl; return 0; }