CodeForces 445A-DZY Loves Chessboard(字符串处理)

简介: CodeForces 445A-DZY Loves Chessboard(字符串处理)

题目描述:


DZY loves chessboard, and he enjoys playing with it.


He has a chessboard of n n n rows and m m m columns. Some cells of the chessboard are bad, others are good. For every good cell, DZY wants to put a chessman on it. Each chessman is either white or black. After putting all chessmen, DZY wants that no two chessmen with the same color are on two adjacent cells. Two cells are adjacent if and only if they share a common edge.


You task is to find any suitable placement of chessmen on the given chessboard.


输入:


The first line contains two space-separated integers n n n and m m m (1<=n,m<=100) .


Each of the next n  lines contains a string of m m m characters: the j  -th character of the i  -th string is either "." or "-". A "." means that the corresponding cell (in the i  -th row and the j  -th column) is good, while a "-" means it is bad.


输出:


Output must contain n  lines, each line must contain a string of m m m characters. The j  -th character of the i  -th string should be either "W", "B" or "-". Character "W" means the chessman on the cell is white, "B" means it is black, "-" means the cell is a bad cell.


If multiple answers exist, print any of them. It is guaranteed that at least one answer exists.


样例输入:(有三组)


1 1


.  


2 2


..


..


3 3


.-.


---


--.


样例输出:


B


BW


WB  


B-B


---


--B


题目大意 and 解题思路:


一个棋盘上有一些格子是坏的,另一些是正常的。对于每一个正常的格子,都要在上面放上棋子。 请找到一组解使没有两个相同颜色的棋子相邻(两个格子相邻为它们存在共同的边)


输入格式: 第一行为两个数n,m。(1<=n,m<=100) 下面n行,每个格子上的字符为'-'或'.','-'表示坏掉的格子,'.'表示正常的格子。


输出格式: 输出n行,每行m个字符。第i个字符串的第j个字符应为“W”,“B”或“ - ”。字符“W”是指在格子上放白色的棋子,“B”意味着放黑色的棋子,“ - ”表示坏掉的格子。 如果有多组答案,输出其中的一个。


这道题其实就是简单的字符串处理问题,把字符 "." 转换为 B 或者 W,字符 "-" 不变,那么我们观察样例可以发现规律:对于第i个字符串的第j个字符,只要(i+j)等于奇数,那么就变为 W;偶数,则变为 B。


AC Code:


#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main() {
  int n,m;
  char s[101][101];
  scanf("%d %d",&n,&m);
  for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
      scanf(" %c",&s[i][j]);
  for(int i=1;i<=n;i++) {
    for(int j=1;j<=m;j++) {
      if(s[i][j]=='-') {
        printf("-");
      }else {
        if((i+j)&1) {
          printf("W");
        }else {
          printf("B");
        }
      }
    }
    printf("\n");
  }
  return 0;
} 


相关文章
|
8月前
|
存储 C语言
C语言字符串反转居然如此简单,后悔没早知道!
C语言字符串反转居然如此简单,后悔没早知道!
湖南大学Java编程题1. 反转字符串
湖南大学Java编程题1. 反转字符串
|
8月前
|
C语言
c语言编程练习题:7-2 I Love GPLT
这道超级简单的题目没有任何输入。 你只需要把这句很重要的话 —— I Love GPLT ——竖着输出就可以了。 所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。 代码长度限制16 KB时间限制400 ms内存限制64 MB
83 0
|
C语言
C语言每日一题——倒转字符
C语言每日一题——倒转字符
|
8月前
|
算法 搜索推荐 程序员
C语言第三十三练—— KMP算法和扩展 KMP算法
C语言第三十三练—— KMP算法和扩展 KMP算法
74 0
|
8月前
|
算法 搜索推荐 程序员
C语言第二十六练 实现罗马数字转整数
C语言第二十六练 实现罗马数字转整数
117 0
|
算法 搜索推荐 编译器
qsort函数详解(C语言排序界的神兵)
qsort函数详解(C语言排序界的神兵)
|
算法 测试技术 C语言
【C语言蓝桥杯每日一题】—— 单词分析
题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。 现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。 输入描述 输入一行包含一个单词,单词只由小写英文字母组成。 对于所有的评测用例,输入的单词长度不超过 1000。 输出描述 输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
350 0
|
Rust
Rust每日一练(Leetday0006) 三数之和、字母组合、四数之和
Rust每日一练(Leetday0006) 三数之和、字母组合、四数之和
101 0
|
算法 C语言 C++
你是真的“C”——C语言详解求素数n种境界~
手把手教学,利用C语言详解求素数n种境界
189 0