Bob is a farmer. He has a large pasture with many sheep. Recently, he has lost some of them due to wolf attacks. He thus decided to place some shepherd dogs in such a way that all his sheep are protected.

The pasture is a rectangle consisting of R × C cells. Each cell is either empty, contains a sheep, a wolf or a dog. Sheep and dogs always stay in place, but wolves can roam freely around the pasture, by repeatedly moving to the left, right, up or down to a neighboring cell. When a wolf enters a cell with a sheep, it consumes it. However, no wolf can enter a cell with a dog.

Initially there are no dogs. Place dogs onto the pasture in such a way that no wolf can reach any sheep, or determine that it is impossible. Note that since you have many dogs, you do not need to minimize their number.

Input

First line contains two integers R (1 ≤ R ≤ 500) and C (1 ≤ C ≤ 500), denoting the number of rows and the numbers of columns respectively.

Each of the following R lines is a string consisting of exactly C characters, representing one row of the pasture. Here, 'S' means a sheep, 'W' a wolf and '.' an empty cell.

Output

If it is impossible to protect all sheep, output a single line with the word "No".

Otherwise, output a line with the word "Yes". Then print R lines, representing the pasture after placing dogs. Again, 'S' means a sheep, 'W' a wolf, 'D' is a dog and '.' an empty space. You are not allowed to move, remove or add a sheep or a wolf.

If there are multiple solutions, you may print any of them. You don't have to minimize the number of dogs.

Examples
input

Copy
6 6
..S...
..S.W.
.S....
..W...
...W..
......
output
Yes
..SD..
..SDW.
.SD...
.DW...
DD.W..
......
input

Copy
1 2
SW
output
No
input

Copy
5 5
.S...
...S.
S....
...S.
.S...
output
Yes
.S...
...S.
S.D..
...S.
.S...
Note

In the first example, we can split the pasture into two halves, one containing wolves and one containing sheep. Note that the sheep at (2,1) is safe, as wolves cannot move diagonally.

In the second example, there are no empty spots to put dogs that would guard the lone sheep.

In the third example, there are no wolves, so the task is very easy. We put a dog in the center to observe the peacefulness of the meadow, but the solution would be correct even without him.

题意:输入如题。。在 '.' 中添加 'D' 使得W不能碰到S

题解:直接先判断S旁边有没有W,如果有就NO,然后把所有的点变成D即可。。

这题坑的是输入。。。这场一直在刚输入,发现自己对于最基础的字符串输入掌握的很差劲啊

这题不能这样读数据:

//不能这样!
scanf("%d %d", &n, &m);
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)scanf("%c",&a[i][j]);

原因:读入n、m后,要敲回车完成m的读入,于是回车'\n'便被读入到a[0][0]中了!同样,在二维数组的每一行末输出,都导致了一个\n被读进去

于是这题无限GG

参考别人的代码,总结出了几种读入的办法:

scanf("%d %d", &n, &m);
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)scanf(" %c",&a[i][j]);//注意这里有空格
char a[maxn][maxn];
for (int i=0;i<n;i++)scanf("%s",a[i]);//这里可以没有空格(加空格也阔以),同时读入字符串,前面没有取地址符
//因为题目给的输入方式,一行中的字符之间没有空格,所以可以以字符串的形式读取
//如果输入形式为 S S W W . . W这样的话,scanf遇到空格会停止读入,cin也是

scanf读入空格的方法:scanf("%[^\n]",a[i]);

其中^\n代表以\n为结束符

当然也可以cin.getline(a[i], maxn);

以下是本题的几个完整代码,注意此类题查找相邻位置以及处理边界的方法。

还有可以不用看到'.'就更改为D,可以在确定Yes之后遍历数组,看到'.'就打印D,妙哉。

#include <bits/stdc++.h>
using namespace std;
#define clr(a, x) memset(a, x, sizeof(a))
#define mp(x, y) make_pair(x, y)
#define pb(x) push_back(x)
#define X first
#define Y second
#define fastin \
ios_base::sync_with_stdio(0); \
cin.tie(0);
typedef long long ll;
typedef long double ld;
typedef pair<int, int> PII;
typedef vector<int> VI;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-6;
const int N = 505;
char s[N][N];
bool vis[N][N];
int dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};//←←重点在这里
int n, m;
void dfs(int x, int y, const char& c)
{
if (x < 0 || y < 0 || x >= n || y >= m) return;//边界处理(这题因为可以直接全D,所以不一定要dfs)
if (vis[x][y] || s[x][y] == '.') return;
if (s[x][y] != c)
{
cout << "No";
exit(0);
}
vis[x][y] = 1;
for (int i = 0; i < 4; i++) dfs(x + dx[i], y + dy[i], c);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.in", "r", stdin);
freopen("1.out", "w", stdout);
#endif
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) cin >> s[i][j];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (s[i][j] != '.' && !vis[i][j])
dfs(i, j, s[i][j]);
cout << "Yes" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (s[i][j] == '.')
cout << "D";
else
cout << s[i][j];
}
cout << endl;
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int dx[4]={0,0,1,-1};
const int dy[4]={1,-1,0,0}; const int N=510;
char s[N][N]; int main() {
int n,m; scanf("%d%d",&n,&m);
for (int i=0;i!=n;++i) scanf("%s",s[i]);
int flag=0;
for (int i=0;i!=n;++i) {
for (int j=0;j!=m;++j) {
for (int k=0;k!=4;++k) {
int px=i+dx[k], py=j+dy[k];
if (px>=0 && px<n && py>=0 && py<m && s[i][j]=='W' && s[px][py]=='S') flag=1;
}
}
}
if (flag) {
printf("No\n");
} else {
printf("Yes\n");
for (int i=0;i!=n;++i)
for (int j=0;j!=m;++j)
if (s[i][j]=='.') s[i][j] = 'D';
for (int i=0;i!=n;++i) printf("%s\n",s[i]);
}
}

Codeforces Round #470 (Div. 2) A Protect Sheep (基础)输入输出的警示、边界处理的更多相关文章

  1. Codeforces Round #470 Div. 2题解

    A. Protect Sheep time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. 【二分】Producing Snow @Codeforces Round #470 Div.2 C

    time limit per test: 1 second memory limit per test: 256 megabytes Alice likes snow a lot! Unfortuna ...

  3. Codeforces Round #470 Div. 1

    A:暴力枚举x2的因子,由此暴力枚举x1,显然此时减去其最大质因子并+1即为最小x0. #include<iostream> #include<cstdio> #include ...

  4. Codeforces Round #241 (Div. 2) B. Art Union 基础dp

    B. Art Union time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  5. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  6. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  7. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  8. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  9. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

随机推荐

  1. docker-网络驱动

    网络驱动程序 Docker的网络子系统是可插拔的,使用驱动程序.默认情况下存在多个驱动程序,并提供核心网络功能: bridge:默认网络驱动程序.如果未指定驱动程序,则这是要创建的网络类型.当的应用程 ...

  2. Spring Security 实战干货: 简单的认识 OAuth2.0 协议

    1.前言 欢迎阅读 Spring Security 实战干货 系列文章 .OAuth2.0 是近几年比较流行的授权机制,对于普通用户来说可能每天你都在用它,我们经常使用的第三方登录大都基于 OAuth ...

  3. 2019版Idea如何激活

    1.下载jar包 链接: https://pan.baidu.com/s/1w4B4_hmiiueNDJMjYKaFyQ 提取码: fkpx 2.修改·vmoptions 1.Help" - ...

  4. # 曹工说Spring Boot源码(10)-- Spring解析xml文件,到底从中得到了什么(context:annotation-config 解析)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  5. P3802 小魔女帕琪 概率与期望

    P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...

  6. 深夜话题boot2docker还有那些隐藏MENU

    马克思的博士论文:自由意识的集中表达 --字体我设为5(18pt),你们懂的 总有人埋汰,终于我想起一个负负得正的话题 为什么放在深夜,因为希望看到的人越少越好,深夜是时差党的乐园 本篇作为之前几篇围 ...

  7. 每天玩转3分钟 MyBatis-Plus - 1. 配置环境

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 ...

  8. 毒瘤养成记1: 如何卡hash

    各位毒瘤大家好, 最近模拟赛考了一道trie+主席树好题, 但大家都用hash水过了这道题(包括我), 为了测试一下新搭建的HEAT OJ的hack功能, 我将继续扮演毒瘤的角色, 用毒瘤的艺术形象努 ...

  9. 将一条路由约束到一组指定的值 约束路由 URL路由

  10. Linux 系统常用管理命令(精简笔记)

    Linux是一套免费使用和自由传播的类Unix操作系统,下面的笔记是我从鸟菜中摘抄出来的重要命令,并进行了一定的排版,摒弃了一些用不到的乱七八糟的命令,目的是在生产环境中能够快速的定位并查询需要命令的 ...