题目链接
题意:给你 n ∗ m n*m n∗m的矩阵表示一个传送带,除了 ( n , m ) (n,m) (n,m)外每个元素都等于’D’或’R’,D表示可以把东西向下传递,R表示可以把东西向右传递,问你最多更改几个元素,使得所有物品均可被传送带传送至 ( n , m ) (n,m) (n,m)。
思路:答案是:最后一行不为R的数量+最后一列不为D的数量。
显然,我们必须更改最后一列中的所有R和最后一行中的所有D。否则,放置在这些单元格中的所有物品都会移出网格。对于其他的网格,由于只能向下或者向右,所以他们全都会走到最后一行或者最后一列。因此只需考虑右边界和下边界。
AC代码:
#include
#define ll long long
using namespace std;
const int N = 100 + 10;
int main() {
ios::sync_with_stdio(0);
ll t, n, m;
string str[N];
cin >> t;
while (t--) {
ll cnt=0;
cin>>n>>m;
for(int i=0;i<n;i++) cin>>str[i];
if(n==1&&m==1) {
cout<<(str[0][0]=='C'?0:1)<<endl;
continue;
}
for(int i=0;i<n-1;i++)
if(str[i][m-1]!='D') cnt++;
for(int i=0;i<m-1;i++)
if(str[n-1][i]!='R') cnt++;
if(str[n-1][m-1]!='C') cnt++;
cout<<cnt<<endl;
}
return 0;
}