CF1391-Codeforces Round #663 (Div. 2)-1391B - Fix You【思维】

题目链接
题意:给你 n ∗ m n*m nm的矩阵表示一个传送带,除了 ( 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;
}

你可能感兴趣的:(codeforces)