逆向暴力求解 538.D Weird Chess
11.12.2018
逆向暴力求解 538.D Weird Chess
New Point:
没有读好题
越界的情况无法判断,所以输出任何一种就可以
所以他给你的样例输出完全是误导
输出还搞错了~
输出的举证中间竟然空格隔开每一个字符,真的是不该错,否则应该是1A吧
然后空间开小了,地图空间倒是注意到了,但是你存取’o’的空间只有1000,而地图大小最大是50*50所以最多是2500个’o’的地址
中间的选择代码逻辑有些混乱
要加强练习!
Describe:
定义新的下棋游戏,给你多个棋子’o’和多个走向’x’,如果走向’x’和’o’重合显示’o’,问你能不能求出一个棋子的走动规则,并用2n-1 * 2n-1的图像表示出来
Solution:
我的思路:扫数据的时候记录好多个棋子的位置,然后遍历输出的数组,记录dx,dy,再对应到输入的图中去判断是否可行,可行就标记’x’不可行就标记’.’,略过中间点’o’,;
对于没有解决方案的情况:没有读好题
·原图中每个’x’必须且只能被访问一次
·原图中源点可以被访问多次不受限制
·图中’.’不能被访问
所以遍历输出数组后判断’x’对应的vis数组访问情况
11.13补充
判断可行
就是先扫一遍只要到达的点不是’.’就可行,越界也没问题
判断不可行
原图中若有’x’没有被轰炸过则方案不可行
认真读题
Code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e3;
char mp[maxn][maxn];
char outmp[maxn][maxn];
int vis[maxn][maxn];
struct node{
int x,y;
}sp[maxn*];
int cnt;
void init()
{
memset(vis,,sizeof(vis));
cnt = ;
}
int n;
bool check(int dx,int dy)
{
int flag = ;
//int broke = 0;
for(int i = ;i < cnt;++i)
{
int nowx = sp[i].x;
int nowy = sp[i].y;
int nx = nowx + dx;
int ny = nowy + dy;
if(nx < || nx>= n || ny < || ny >= n)continue;
if(mp[nx][ny] == '.')
{
return false;
}
}
for(int i = ;i < cnt;++i)
{
int nowx = sp[i].x;
int nowy = sp[i].y;
int nx = nowx + dx;
int ny = nowy + dy;
if(nx < || nx>= n || ny < || ny >= n)continue;
if(mp[nx][ny] == 'x')
{
vis[nx][ny]++;
}
}
return true;
}
int main()
{
scanf("%d",&n);
init();
for(int i = ;i < n;i++)
{
scanf("%s",mp[i]);
for(int j = ;j < n;++j)
{
if(mp[i][j] == 'o')
{
sp[cnt].x = i;
sp[cnt++].y = j;
}
}
}
int len = * n - ;
int midx = n - ,midy = n - ;
outmp[midx][midy] = 'o';
for(int i = ;i < len;++i)
{
for(int j = ;j < len;++j)
{
if(i == midx && j == midy)continue;
int dx = i - midx;
int dy = j - midy;
if(check(dx,dy))
outmp[i][j] = 'x';
else
outmp[i][j] = '.';
}
}
int flag = ;
for(int i = ;i < n;++i)
{
for(int j = ;j < n;++j)
{
if(mp[i][j] == 'x' && vis[i][j] == )
{
flag = ;
}
}
}
if(flag)
{
printf("YES\n");
for(int i = ;i < len;++i)
{
printf("%s\n",outmp[i]);
}
}
else
printf("NO\n");
return ;
}
11.12.2018
逆向暴力求解 538.D Weird Chess
New Point:
没有读好题
越界的情况无法判断,所以输出任何一种就可以
所以他给你的样例输出完全是误导
输出还搞错了~
输出的举证中间竟然空格隔开每一个字符,真的是不该错,否则应该是1A吧
然后空间开小了,地图空间倒是注意到了,但是你存取’o’的空间只有1000,而地图大小最大是50*50所以最多是2500个’o’的地址
中间的选择代码逻辑有些混乱
要加强练习!
Describe:
定义新的下棋游戏,给你多个棋子’o’和多个走向’x’,如果走向’x’和’o’重合显示’o’,问你能不能求出一个棋子的走动规则,并用2n-1 * 2n-1的图像表示出来
Solution:
我的思路:扫数据的时候记录好多个棋子的位置,然后遍历输出的数组,记录dx,dy,再对应到输入的图中去判断是否可行,可行就标记’x’不可行就标记’.’,略过中间点’o’,;
对于没有解决方案的情况:没有读好题
·原图中每个’x’必须且只能被访问一次
·原图中源点可以被访问多次不受限制
·图中’.’不能被访问
所以遍历输出数组后判断’x’对应的vis数组访问情况
11.13补充
判断可行
就是先扫一遍只要到达的点不是’.’就可行,越界也没问题
判断不可行
原图中若有’x’没有被轰炸过则方案不可行
认真读题
Code:
逆向暴力求解 538.D Weird Chess的更多相关文章
- Codeforces Round #300 D. Weird Chess 水题
D. Weird Chess Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/538/proble ...
- POJ 1562(L - 暴力求解、DFS)
油田问题(L - 暴力求解.DFS) Description The GeoSurvComp geologic survey company is responsible for detecting ...
- 隐型马尔科夫模型(HMM)向前算法实例讲解(暴力求解+代码实现)---盒子模型
先来解释一下HMM的向前算法: 前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率.我们先来看看前向算法是如何求解这个问题的. 前向算法本质上属于动态规划的算法,也就是 ...
- BestCoder Round #79 (div.2)-jrMz and angles,,暴力求解~
jrMz and angle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- [codeforces538D]Weird Chess
[codeforces538D]Weird Chess 试题描述 Igor has been into chess for a long time and now he is sick of the ...
- hdu6570Wave (暴力求解)
Problem Description Avin is studying series. A series is called "wave" if the following co ...
- <字符串匹配>KMP算法为何比暴力求解的时间复杂度更低?
str表示文本串,m表示模式串; str[i+j] 和 m[j] 是正在进行匹配的字符; KMP的时间复杂度是O(m+n) , 暴力求解的时间复杂度是O(m*n) KMP利用了B[0:j]和A[i ...
- HDU 4462 Scaring the Birds (暴力求解,二进制法)
题意:给定一个 n*n的矩阵,在一些位置放上稻草人,每个稻草人的范围是一定,问你最少几个能覆盖整个矩阵. 析:稻草人最多才10个,所以考虑暴力,然后利用二进制法,很容易求解,并且时间很少0ms,注意有 ...
- ZOJ 2856 Happy Life 暴力求解
因为是Special Judge 的题目,只要输出正确答案即可,不唯一 暴力力求解, 只要每次改变 happiness 值为负的人的符号即可. 如果计算出当前人的 happiness 值为负,那么将其 ...
随机推荐
- [Solution] 885. Spiral Matrix Ⅲ
Difficulty: Medium Problem On a 2 dimensional grid with R rows and C columns, we start at (r0, c0) f ...
- 使用Spring Cache缓存出现的小失误
前文:今天在使用Spring Boot项目使用Cache中出现的小失误,那先将自己创建项目的过程摆出来 1.首先创建一个Spring Boot的项目(我这里使用的开发工具是Intellij IDEA) ...
- 理解javascript中的立即执行函数(function(){})()
之前看了好多代码,都有用到这种函数的写法,但是都没认真的去想为什么会这样写,今天开始想学习下jquery的源码,发现jquery也是使用这种方式,用(function(window, undefine ...
- git log命令常用参数集合
git log 查看 提交历史 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面. 常用的格式占位符写法及其代表的意义.选项 说明%H 提交对象(commit)的 ...
- 切面编程AOP之KingAOP
1. 在Nuget上安装KingAOP 2. 创建一个新的类 public class Test : IDynamicMetaObjectProvider { public DynamicMetaOb ...
- docker run 与docker start的区别
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start). 而docker start的作用是,重新启动 ...
- VBA XML信息提取
Option Explicit Sub 读取XML节点() '后期绑定 'Dim xdoc As Object 'Set xdoc = CreateObject("MSXML2.DOMDoc ...
- 在Centos7下搭建Socks5代理服务器
在Centos7下搭建Socks5代理服务器 http://blog.51cto.com/quliren/2052776 采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器 ...
- 现代编译原理——第六章:中间树 IR Tree 含源码
转自: http://www.cnblogs.com/BlackWalnut/p/4559717.html 这一章,就虎书而言,理论知识点是及其少的,就介绍了为什么要有一个中间表示树.看下面这张图就能 ...
- Codeforces 1083C Max Mex
Description 一棵\(N\)个节点的树, 每个节点上都有 互不相同的 \([0, ~N-1]\) 的数. 定义一条路径上的数的集合为 \(S\), 求一条路径使得 \(Mex(S)\) 最大 ...