801 移棋子游戏

// 801 移棋子游戏.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://oj.daimayuan.top/course/22/problem/903

有个n×m的棋盘,其中(1,1)格在左上角,(n,m)格在右下角。
棋盘的第一行和第一列的每个格子标了黑白两种颜色。

上面有一个棋子。Alice和Bob轮流移动这个棋子,Alice先手移动。
每次可以往上或往左移动一格,一旦这个棋子移动到第一行或者第一列游戏结束。
执行最后一步移动的人,如果将棋子移动到黑格,那么就获胜,否则就失败。

现在给这个棋子的起始位置,问最后获胜的玩家是谁,对于所有(i,j)
满足2≤i≤n,2≤j≤m输出。

输入格式
第一行两个整数n,m(2≤n,m≤1000)。

接下来一行m−1
个由BW构成的字符串,分别表示第一行2
到m
格的颜色,其中B是黑色,W是白色。

接下来一行n−1
个由BW构成的字符串,分别表示第一列2
到n
格的颜色,其中B是黑色,W是白色。

输出格式
一共n−1
行,每行m−1
个字母,表示胜者。如果Alice获胜,输出一个A,否则输出一个B。

样例输入
3 4
WBW
BW
样例输出
AAB
BAA
*/

#include <iostream>


using namespace std;

const int N = 1010;
int dp[N][N];
int n, m;
char row[1010], col[1010];


int main()
{
	cin >> n >> m;
	cin >> &row[2] >> &col[2];

	if (row[2] == 'B' || col[2] == 'B') dp[2][2] = 1;

	for (int i = 3; i <= m; i++) {
		if (row[i] == 'B' || dp[2][i - 1] == 0)  dp[2][i] = 1;
	}

	for (int j = 3; j <= n; j++) {
		if (col[j] == 'B' || dp[j - 1][2] == 0) dp[j][2] = 1;
	}

	for (int i = 3; i <= n; i++) {
		for (int j = 3; j <= m; j++) {
			dp[i][j] = !(dp[i - 1][j] & dp[i][j - 1]);
		}
	}

	for (int i = 2; i <= n; i++) {
		for (int j = 2; j <= m; j++) {
			if (dp[i][j]) {
				cout << "A";
			}
			else {
				cout << "B";
			}
		}
		cout << endl;
	}
	


	return 0;
}

//简洁版本


#include <iostream>
#include <stdio.h>

using  namespace std;
typedef long long ll;

const int N = 2010;
int n, m, dp[N][N];
char r[N], c[N];



int main()
{
	scanf("%d%d",&n,&m);
	scanf("%s",r+2);
	scanf("%s",c+2);
	for (int i = 2; i <= m; i++) {
		dp[1][i] = (r[i] =='W');
		//r[i] = 'W' 1,'B' 0
	}

	for (int i = 2; i <= n; i++) {
		dp[i][1] = (c[i] == 'W');
		//r[i] = 'W' 1,'B' 0
	}

	for (int i = 2; i <= n; i++) {
		for (int j = 2; j <= m; j++) {
			if (dp[i][j - 1] == 0) dp[i][j] = 1;
			if (dp[i - 1][j] == 0) dp[i][j] = 1;
			//dp[i][j] = !(dp[i][j - 1] & dp[i - 1][j]);
			if (dp[i][j] == 1) printf("A");
			else printf("B");
		}
		puts("");
	}


	return 0;

}

posted on   itdef  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
历史上的今天:
2020-12-04 LeetCode 659. 分割数组为连续子序列
2019-12-04 poj 2991 起重机 题解《挑战程序设计竞赛》
2014-12-04 stl中char 与wchar 的转换

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示