Codeforces Round #228 (Div. 2) B Fox and Cross(DFS)
2016-09-07 09:10
495 查看
思路:爆搜即可
#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int dir[5][2]={{0,0},{1,-1},{1,0},{1,1},{2,0}};
int n;
char mp[maxn][maxn];
int vis[maxn][maxn];
bool dfs(int x, int y)
{
if (y == n)
{
y = 0;
x++;
}
if (x == n) return true;
if (mp[x][y] == '.' || vis[x][y]) return dfs(x, y + 1);
for (int i = 0; i < 5; i++)
{
int dx = x + dir[i][0], dy = y + dir[i][1];
if (dx < 0 || dx >= n || dy < 0 || dy >= n) return false;
if (vis[dx][dy] || mp[dx][dy] != '#') return false;
}
for(int i = 0;i<5;i++)
vis[x+dir[i][0]][y+dir[i][1]]=1;
bool flag = dfs(x, y + 1);
for(int i = 0;i<5;i++)
vis[x+dir[i][0]][y+dir[i][1]]=0;
return flag;
}
int main ()
{
scanf("%d",&n);
for (int i = 0; i < n; i++)
scanf("%s", mp[i]);
printf("%s\n", dfs(0, 0) ? "YES" : "NO");
return 0;
}
B. Fox and Cross
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Fox Ciel has a board with n rows and n columns.
So, the board consists of n × n cells. Each cell contains either a symbol '.',
or a symbol '#'.
A cross on the board is a connected set of exactly five cells of the board that looks like a cross. The picture below shows how it looks.
Ciel wants to draw several (may be zero) crosses on the board. Each cross must cover exactly five cells with symbols '#', and any cell with symbol
'#' must belong to some cross. No two crosses can share a cell.
Please, tell Ciel if she can draw the crosses in the described way.
Input
The first line contains an integer n (3 ≤ n ≤ 100)
— the size of the board.
Each of the next n lines describes one row of the board. The i-th
line describes the i-th row of the board and consists of n characters.
Each character is either a symbol '.', or a symbol '#'.
Output
Output a single line with "YES" if Ciel can draw the crosses in the described way. Otherwise output a single line with "NO".
Examples
input
output
input
output
input
output
input
output
input
output
Note
In example 1, you can draw two crosses. The picture below shows what they look like.
In example 2, the board contains 16 cells with '#', but each cross contains 5. Since 16 is not a multiple of 5, so it's impossible to cover all.
#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int dir[5][2]={{0,0},{1,-1},{1,0},{1,1},{2,0}};
int n;
char mp[maxn][maxn];
int vis[maxn][maxn];
bool dfs(int x, int y)
{
if (y == n)
{
y = 0;
x++;
}
if (x == n) return true;
if (mp[x][y] == '.' || vis[x][y]) return dfs(x, y + 1);
for (int i = 0; i < 5; i++)
{
int dx = x + dir[i][0], dy = y + dir[i][1];
if (dx < 0 || dx >= n || dy < 0 || dy >= n) return false;
if (vis[dx][dy] || mp[dx][dy] != '#') return false;
}
for(int i = 0;i<5;i++)
vis[x+dir[i][0]][y+dir[i][1]]=1;
bool flag = dfs(x, y + 1);
for(int i = 0;i<5;i++)
vis[x+dir[i][0]][y+dir[i][1]]=0;
return flag;
}
int main ()
{
scanf("%d",&n);
for (int i = 0; i < n; i++)
scanf("%s", mp[i]);
printf("%s\n", dfs(0, 0) ? "YES" : "NO");
return 0;
}
B. Fox and Cross
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Fox Ciel has a board with n rows and n columns.
So, the board consists of n × n cells. Each cell contains either a symbol '.',
or a symbol '#'.
A cross on the board is a connected set of exactly five cells of the board that looks like a cross. The picture below shows how it looks.
Ciel wants to draw several (may be zero) crosses on the board. Each cross must cover exactly five cells with symbols '#', and any cell with symbol
'#' must belong to some cross. No two crosses can share a cell.
Please, tell Ciel if she can draw the crosses in the described way.
Input
The first line contains an integer n (3 ≤ n ≤ 100)
— the size of the board.
Each of the next n lines describes one row of the board. The i-th
line describes the i-th row of the board and consists of n characters.
Each character is either a symbol '.', or a symbol '#'.
Output
Output a single line with "YES" if Ciel can draw the crosses in the described way. Otherwise output a single line with "NO".
Examples
input
5 .#... ####. .#### ...#. .....
output
YES
input
4 #### #### #### ####
output
NO
input
6 .#.... ####.. .####. .#.##. ###### .#..#.
output
YES
input
6 .#..#. ###### .####. .####. ###### .#..#.
output
NO
input
3 ... ... ...
output
YES
Note
In example 1, you can draw two crosses. The picture below shows what they look like.
In example 2, the board contains 16 cells with '#', but each cross contains 5. Since 16 is not a multiple of 5, so it's impossible to cover all.
相关文章推荐
- 初学C++之自定义类型名简化
- Spring 使用注解方式进行事务管理
- Codeforces Round #228 (Div. 2) A - Fox and Number Game(水题)
- Java 数组声明、创建、初始化详解
- 解方程(按位或)
- 2、从键盘上输入两个整数,由用户回答它们的和,差,积,商和取余运算结果,并统计出正确答案的个数。
- Android Studio 将引用第三方jar包的android工程打包成jar包
- JQuery语法总结和注意事项
- swap 函数的四种写法
- TQ210 —— NandFlash
- Android Studio 学习笔记一(一哥)
- js、jq、ajax之间的关系
- centos vim配置高亮语法和格式化粘贴
- ERP系统开发中使用FineUI那些事
- TQ210 —— LCD
- UVa 1625
- Android UI控件----ExpandableListView的基本用法
- MongoDB(一)---简介
- c#操作WORD
- Nginx+Tomcat集群解决均衡负载及生产环境热部署