Codeforces Round #470 (Div. 2) A Protect Sheep (基础)输入输出的警示、边界处理
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.
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.
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.
6 6
..S...
..S.W.
.S....
..W...
...W..
......
Yes
..SD..
..SDW.
.SD...
.DW...
DD.W..
......
1 2
SW
No
5 5
.S...
...S.
S....
...S.
.S...
Yes
.S...
...S.
S.D..
...S.
.S...
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被读进去
参考别人的代码,总结出了几种读入的办法:
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 (基础)输入输出的警示、边界处理的更多相关文章
- Codeforces Round #470 Div. 2题解
A. Protect Sheep time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- 【二分】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 ...
- Codeforces Round #470 Div. 1
A:暴力枚举x2的因子,由此暴力枚举x1,显然此时减去其最大质因子并+1即为最小x0. #include<iostream> #include<cstdio> #include ...
- 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 ...
- 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 ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
随机推荐
- Hadoop中的Partitioner浅析
转自:http://blog.csdn.net/b1198103958/article/details/47169105 Hadoop里面的MapReduce编程模型,非常灵活,大部分环节我们都可以重 ...
- Java集合概述(上)
Java集合概述(上) 前言 先说说,为什么要写这么一篇博客(我总是喜欢写原因).因为最近到年底了,正好又要准备面试,所以在做各方面的技术总结.而Java集合是Java非常重要的一部分,自己前前后后也 ...
- electron-vue 设置cookie
//设置登录cookie setCookie(name,value){ var Days=30; var exp=new Date(); var date=Math.round(exp.getTime ...
- 【转】ArcGIS Server 站点架构-Web Adaptor
GIS 服务器内置了Web服务器,如果我想用我自己企业内部的服务器,该怎么做? 多个GIS服务器集群又如何做? …… 有问题,说明我们在思考,这也是我们希望看到的,因为只有不断的思考,不断的问自己为什 ...
- MySQL 排名、分组后组内排名、取各组的前几名
一.排名 /*普通排名:从1开始,顺序往下排*/ AS rank ) r ORDER BY score; /*并列排名:相同的值是相同的排名*/ SELECT cs.* , CASE WHEN @p= ...
- noip2017考前基础复习——数论数学
·最大公约数 gcd 辗转相除法 gcd(a,b)=gcd(b,a%b) int gcd(int x,int y){ ) return x; return gcd(y,x%y); } 效率O(log ...
- thinkphp快速入门(学习php框架及代码审计)
之前想学习php代码审计,但是没有坚持下去,记得当时看到了很多CMS框架采用MVC架构,就嘎然而止了. 为了深入学习下框架,一边看着thinkphp官方文档,一边写个简单的登陆注册页面以加深理解. 官 ...
- ninject 的 实现 的 理解
mvc 用ninject 好像 有 的. 加上 ClassDiagram .ClassDiagram1.rar Represents a site on a type where a value c ...
- 我的ubuntu源18和16
16阿里云的 deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restric ...
- 剑指Offer对答如流系列 - 重建二叉树
面试题6:重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8} ...