题解 CF1391B 【Fix You】

题目大概就是在说,对于任意 ( i , j ) (i,j) (i,j) 都有一个标记,如果标记为 D \texttt{D} D j就是说到了这个格子会往下走,否则就是往右走。现在问你,如果最少要修改多少个格子的标记使得 i ≠ n i\neq n i=n j ≠ m j\neq m j=m,就一定能顺着格子的路径走到 ( n , m ) (n,m) (n,m),不会出界。

我们发现一个格子的标记要么是向下走,要么是向右走,因此,不会出左边界和右边界。然后,就只有可能出下边界和右边界了,然后出下边界就一定是最后一行的格子标记为下(除了 ( n , m ) (n,m) (n,m)),同理出右边界一定最后一列的格子标记为右(除了 ( n , m ) (n,m) (n,m))。

因此,答案为这些格子的个数。

int work(){
	int n,m;read(n);read(m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			char ch;cin>>ch;
			if(ch=='R')a[i][j]=1;
			else a[i][j]=2;
		}
	int ans=0;
	for(int i=1;i<m;i++)
		if(a[n][i]==2)ans++;
	for(int i=1;i<n;i++)
		if(a[i][m]==1)ans++;
	cout<<ans<<endl;
	return 0;
}

你可能感兴趣的:(题解 CF1391B 【Fix You】)