逆向暴力求解 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 值为负,那么将其 ...
随机推荐
- Html 内容
1.Html就是超文本标记语言的简写,是最基础的网页语言. 2.Html是通过标签来定义的语言,代码都是由标签组成的. 3.Html代码不用区分大小写. 4.Html代码由<html>开始 ...
- delete 和 delete [] 的真正区别
c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 de ...
- AD16PCB如何快速删除走线
工具(Tools)取消布线(Un_Route)全部(AII) ad pcb画图,如果想整体去掉一条线,只要是连接在一起的,不管在哪一层,都可以采取如下方法:1.PCB画面下,按组合键Ctrl+H,会出 ...
- java8--List转为Map、分组、过滤、求和等操作----代码示例
Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ...
- 警惕32位程序在MethodImplOptions.Synchronized在x64机器上的同步缺陷[z]
https://www.cnblogs.com/junchu25/archive/2012/08/10/2631422.html 上周四产品上线一切运行正常,做了一点小改动后周四晚上发布,周五大量用户 ...
- ORACLE设置用户密码不过期
1.查看用户的 profile 是哪个,一般是 default SELECT USERNAME, PROFILE FROM dba_users; 2.查看指定概要文件(这里是1中对应的profile) ...
- Ubuntu16.04 静态IP设置
为VMware虚拟机内安装的Ubuntu 16.04设置静态IP地址NAT方式 1.安装环境 VMware 12 Ubuntu 16.04 x86_64 2.在VMware中,配置网络环境 VMwar ...
- dos命令 创建数据库,建表,两表联查,三表联查(mysql---第一篇)
首先打开mysql的控制台,输入密码进行登录 (ps:本文的mysql控制台,是运用的php的集成环境(phpstudy),点击运行,找到mysql命令行,直接打开就可以了) 登陆成功后,就可以进行 ...
- openstack系列文章(2)dashboard
玩转dashboard之前,考虑一些事情:(1)安全问题:网络访问策略(2)镜像的密码管理:windows或者linux,root或者administrator密码怎么管理(3)怎样创建自己的镜像:w ...
- map和list循环遍历
//map遍历(zmm是实体类) Map<String, zmm> maps = new HashMap<String, zmm>(); //给map存值: maps.put( ...