[COGS 622] [NOIP2011] 玛雅游戏 模拟
整个模拟的关键除了打出来就是一个剪枝:对于两个左右相邻的块你不用再走←,因为走→是等效的
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#define r register
using namespace std;
int f[][][];
int s[][];
bool die[][];
int n;
bool god;
inline void Init()
{
scanf("%d",&n);
for(int i=,x;i<=;i++)
while()
{
scanf("%d",&x);
if(x==)break;
f[][i][++f[][i][]]=x;
}
}
void arrange(int h,int x,int y,int t)
{
s[h][]=x;
s[h][]=y;
s[h][]=t;
memcpy(f[h],f[h-],sizeof(f[h]));
f[h][x][y]^=f[h][x+t][y]^=f[h][x][y]^=f[h][x+t][y];
if(!f[h][x][y])++f[h][x+t][],--f[h][x][];
if(f[h][x][y]==&&f[h][x][y+]!=)
{
r int j=y+;
while(f[h][x][j]!=)
f[h][x][j-]^=f[h][x][j]^=f[h][x][j-]^=f[h][x][j],++j;
}
if(f[h][x+t][y-]==)
{
r int j=y-;
while(f[h][x+t][j]==)
f[h][x+t][j]^=f[h][x+t][j+]^=f[h][x+t][j]^=f[h][x+t][j+],--j;
}
r int get;
do
{
get=;
for(r int i=;i<=;++i)
for(r int j=;j<=f[h][i][];++j)
{
r int k=;
while(f[h][i][j]==f[h][i][j+k])++k;
if(k>=)
{
for(int l=;l<k;++l)
die[i][j+l]=;
}
j+=k-;
}
for(r int i=;i<=;++i)
for(r int j=;j<=;++j)
{
if(f[h][j][i]==)continue;
r int k=;
while(f[h][j][i]==f[h][j+k][i])++k;
if(k>=)
{
for(int l=;l<k;l++)
die[j+l][i]=;
}
j+=k-;
}
for(r int i=;i<=;++i)
for(r int j=;j<=f[h][i][];++j)
if(die[i][j])
f[h][i][j]=,die[i][j]=;
for(r int i=;i<=;++i)
{
r int k=;
for(r int j=;j<=f[h][i][];++j)
if(f[h][i][j])f[h][i][++k]=f[h][i][j];
else ++get;
for(r int j=k+;j<=f[h][i][];++j)f[h][i][j]=;
f[h][i][]=k;
}
}while(get);
}
void dfs(int x)
{
if(x==n)
{
r int sum=;
for(r int i=;i<=;++i)sum+=f[x][i][];
if(sum==)god=;
return;
}
for(r int i=;i<=;i++)
for(r int j=;j<=f[x][i][];j++)
{
if(i!=)
{
arrange(x+,i,j,);
dfs(x+);
if(god)return;
}
if(i!=&&f[x][i-][j]==)
{
arrange(x+,i,j,-);
dfs(x+);
if(god)return;
}
}
}
inline void work()
{
dfs();
if(god)
{
for(int i=;i<=n;i++)
printf("%d %d %d\n",s[i][]-,s[i][]-,s[i][]);
}
else
printf("-1");
}
int main()
{
Init();
work();
return ;
}
[COGS 622] [NOIP2011] 玛雅游戏 模拟的更多相关文章
- NOIP2011玛雅游戏
闲的没事干,出来写一下早两天刷的一道搜索题NOIP2011玛雅游戏,其实这道题还是比较水的,虽然看起来可能有点复杂. 方法很简单粗暴,直接根据规则模拟就行. 话不多说直接上代码(关键操作在注释中有提到 ...
- [NOIP2011]玛雅游戏
闲的没事干,出来写一下早两天刷的一道搜索题NOIP2011玛雅游戏,其实这道题还是比较水的,虽然看起来可能有点复杂. 方法很简单粗暴,直接根据规则模拟就行. 话不多说直接上代码(关键操作在注释中有提到 ...
- noip2011 玛雅游戏 大模拟
深搜+模拟 需要剪枝:同一移动向右移了就不需要向左移了 #include<cstdio> #include<cstring> #include<iostream> ...
- 玛雅游戏[NOIP2011]
题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- Luogu 1312 【NOIP2011】玛雅游戏 (搜索)
Luogu 1312 [NOIP2011]玛雅游戏 (搜索) Description Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空 ...
- [NOIP2011] mayan游戏(搜索+剪枝)
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- Noip2011 Mayan游戏 搜索 + 模拟 + 剪枝
写了一下午,终于AC了. 由于n<=5, 所以不需要太多的剪枝和技巧也能过.可以将操作后的消方块和下落和剪枝函数写到一个结构体中,这样会减少调试难度,更加简洁. 可以采用如下剪枝: 1. 如果当 ...
- [NOIP2011]Mayan游戏 题解
题目大意: 有一个5*7的方格,上面有几种颜色的方块,如果在一横行或者竖列上有连续三个或者三个以上相同颜色的方块,则它们将立即被消除,方块消除之后,消除位置之上的方块将掉落.每步移动可以且仅可以沿横向 ...
- 【ccf2017-12-2】游戏(模拟)
问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向. 游戏开始,从1号小朋 ...
随机推荐
- PHP(YII2实现) 微信网页授权
参考地址 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 实现步骤分析: 获取code->access ...
- Hadoop(13)-MapReduce框架原理--Job提交源码和切片源码解析
1.MapReduce的数据流 1) Input -> Mapper阶段 这一阶段的主要分工就是将文件切片和把文件转成K,V对 输入源是一个文件,经过InputFormat之后,到了Mapper ...
- TopCoder SRM 489 Div1 Lev3:AppleTree
挺优秀的一道题,想出做法时有些惊艳. 题意: 数轴上有\(D\)个连续整数刻度,有\(N\)棵树要种在这些刻度上,其中第\(i\)棵与两旁(如果有的话)相邻的树至少要相距\(R_i\),问方法数. \ ...
- List排序方法
可用使用Collections.sort(List<T> list)和Collections.sort(List<T> list, Comparator<? super ...
- app:showAsAction 和android:showAsAction
app:showAsAction 它有三个可选项1.always:总是显示在界面上2.never:不显示在界面上,只让出现在右边的三个点中3.ifRoom:如果有位置才显示,不然就出现在右边的三个点中 ...
- 第6模块 web框架口述题
状态码如200 OK,以3位数字和原因 成.数字中的 一位指定了响应 别,后两位无分 .响应 别有以下5种. 重定向:客户端像服务器端发送请求,服务器告诉客户端你去重定向(状态码302,响应头loca ...
- Xshell6连接虚拟机(一)
普通用户转换成管理员: 一.首先进入终端: 1.输入: su 然后回车 2.若输入密码 则显示认证失败,说明还是普通管理员身份. (1)设置新密码: sudo passwd r ...
- 【Dataset】Goodbooks-10k: 图书推荐数据
当前推荐领域一些公开的据集都是关于电影和音乐的(比如Netflix.Movielens等),没有关于图书推荐的数据.本文将要介绍的就是一份用于图书推荐的数据集,该数据来源于goodreads网站,包含 ...
- Spring Cloud 自定义ConfigServer 解决敏感信息存储问题
公司需要将系统配置信息中的敏感信息独立存放. 现有系统采用Spring Cloud Config提供配置信息,其中敏感信息主要是Db配置,分解本次需求: (1)数据库配置信息分离(主要是Db信息). ...
- Python标准模块logging
http://blog.csdn.net/fxjtoday/article/details/6307285 开发Python, 一直以来都是使用自己编写的logging模块. 比较土...... 今天 ...