noip2011 玛雅游戏 大模拟
深搜+模拟
需要剪枝:同一移动向右移了就不需要向左移了
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,bo[6][8],tot,a[6][6][8],b[6][3];
bool boo;
int print(int x){
printf("\n");
for(int i=0;i<5;i++){
for(int j=0;j<7;j++)
printf("%d ",a[x][i][j]);
printf("\n");
}
printf("\n");
return 0;
}
bool boooo[5]={0};
void fall(int step){
for(int i=0;i<5;i++){
int bottom=0;
while(a[step][i][bottom]) bottom++;
if(bottom>=7) continue;
for(int j=bottom;j<7;j++){
if(a[step][i][j]){
a[step][i][bottom++]=a[step][i][j];
a[step][i][j]=0;
}
}
}
}
bool wipe(int step){
boo=0; tot++;
for(int i=0;i<5;i++)
for(int j=2;j<7;j++){
if(!a[step][i][j]) break;
if(a[step][i][j]==a[step][i][j-1]&&a[step][i][j]==a[step][i][j-2])
bo[i][j]=bo[i][j-1]=bo[i][j-2]=tot;
}
for(int i=0;i<7;i++)
for(int j=2;j<5;j++){
if(!a[step][j][i]) break;
if(a[step][j][i]==a[step][j-1][i]&&a[step][j][i]==a[step][j-2][i])
bo[j][i]=bo[j-1][i]=bo[j-2][i]=tot;
}
for(int i=0;i<5;i++)
for(int j=0;j<7;j++)
if(bo[i][j]==tot){
a[step][i][j]=0;
boo=1;
}
return boo;
}
void move(int step,int x,int y,int pos){
swap(a[step][x][y],a[step][x+pos][y]);
fall(step);
while(wipe(step)==1)
fall(step);
}
void dfs(int step,int x,int y,int pos){
if(step>n) return;
if(step!=0){
for(int i=0;i<5;i++)
for(int j=0;j<7;j++)
a[step][i][j]=a[step-1][i][j];
move(step,x,y,pos);
b[step][0]=x;
b[step][1]=y;
b[step][2]=pos;
}
boo=0;
bool vis[6][8]={0};
for(int i=0;i<5;i++)
for(int j=0;j<7;j++)
if(a[step][i][j]){
boo=1;
if(i!=4){
dfs(step+1,i,j,1);
vis[i+1][j]=1;
}
if(i&&(!vis[i][j]))dfs(step+1,i,j,-1);
}
if(boo==0){
for(int i=1;i<=step;i++)
printf("%d %d %d\n",b[i][0],b[i][1],b[i][2]);
exit(0);
}
}
int main()
{
freopen("mayan.in","r",stdin);
freopen("mayan.out","w",stdout);
scanf("%d",&n);
for(int i=0;i<5;i++){
int j=0;
while(scanf("%d",&a[0][i][j++])==1&&a[0][i][j-1]!=0){}
}
dfs(0,0,0,0);
printf("-1\n");
return 0;
}
noip2011 玛雅游戏 大模拟的更多相关文章
- NOIP2011玛雅游戏
闲的没事干,出来写一下早两天刷的一道搜索题NOIP2011玛雅游戏,其实这道题还是比较水的,虽然看起来可能有点复杂. 方法很简单粗暴,直接根据规则模拟就行. 话不多说直接上代码(关键操作在注释中有提到 ...
- [NOIP2011]玛雅游戏
闲的没事干,出来写一下早两天刷的一道搜索题NOIP2011玛雅游戏,其实这道题还是比较水的,虽然看起来可能有点复杂. 方法很简单粗暴,直接根据规则模拟就行. 话不多说直接上代码(关键操作在注释中有提到 ...
- [COGS 622] [NOIP2011] 玛雅游戏 模拟
整个模拟的关键除了打出来就是一个剪枝:对于两个左右相邻的块你不用再走←,因为走→是等效的 #include<cstdio> #include<cstring> #include ...
- Noip2011 Mayan游戏 搜索 + 模拟 + 剪枝
写了一下午,终于AC了. 由于n<=5, 所以不需要太多的剪枝和技巧也能过.可以将操作后的消方块和下落和剪枝函数写到一个结构体中,这样会减少调试难度,更加简洁. 可以采用如下剪枝: 1. 如果当 ...
- 玛雅游戏[NOIP2011]
题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- Luogu 1312 【NOIP2011】玛雅游戏 (搜索)
Luogu 1312 [NOIP2011]玛雅游戏 (搜索) Description Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空 ...
- [noip2011 luogu1312] Mayan游戏(模拟)
原题:传送门 大模拟- 两个剪枝: 1.如果左边不为空就不往左边走(因为一定不如左边的移到右边优) 2.如果相邻两颜色相同不需移动 当然也有别的小剪枝(我没写)比如如果当前某一颜色剩余块数满足1< ...
- [NOIP2011] mayan游戏(搜索+剪枝)
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- Bzoj1972: [Sdoi2010]猪国杀 题解(大模拟+耐心+细心)
猪国杀 - 可读版本 https://mubu.com/doc/2707815814591da4 题目可真长,读题都要一个小时. 这道题很多人都说不可做,耗时间,代码量大,于是,本着不做死就不会死的精 ...
随机推荐
- Mybatis与Ibatis比较
随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis 虽然从正式版发布至今也有近一年时间,官方也非常友好的提供了中文版的使用手册,不过相信很多人还在项目中使用iba ...
- VMS项目总结
开发完一个项目后,如果能够很好的对这个项目做个总结,对我们以后的项目开发以及个人技术的积累都会有很大的帮助.最近在外派公司做完一个系统,在此进行一下深入的总结,也希望给读者带来一些个启示. 一.系统介 ...
- MinGW安装与使用简介
MinGW 安装与使用简介 安装方法:其实很简单,如下: Step one: 到这里下载 MinGW, 网速慢的话可能打不开, 是个外国网站 (上面的网站镜像可能 出了点问题 , 有的东西下载下来却不 ...
- 视频客观质量评价工具:MSU Video Quality Measurement Tool【ssim,psnr】
MSU Video Quality Measurement Tool(msu vqmt)是莫斯科国立大学(Moscow State University)的Graphics and Media Lab ...
- CentOs 6 或 7 yum安装JDK1.8 (内含报 PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.163.com'"错误解决方案)并分析为什么不能yum安装
查看JDK的安装路径 # java -version============================查看Linux系统版本信息# cat /etc/redhat-releaseCentOS r ...
- ajax接收php返回得到一堆html代码
ajax接收php返回得到一堆html代码 一. 错误代码: <font size='1'><table class='xdebug-error xe-notice' di ...
- Rafy 开源贡献中心 - 组织成立,并试运行一月小结
背景 最近两年,工作中虽然大量使用了 Rafy 框架作为各个产品.项目的开发框架.我是 2015 年的年中加入现在这家公司的,由于我个人工作太忙的缘故,一直没怎么编码,Rafy 框架底层的核心成长也比 ...
- NGINX按天生成日志文件的简易配置
NGINX按天生成日志文件的简易配置 0x01 最近后端童鞋遇到一个小需求,拆分nginx生成的log文件,最好是按天生成,看着她还有很多bug待改的状态,我说这个简单啊,我来吧.曾经搞node后端的 ...
- 16.git命令汇总
- Linux内核架构与底层--读书笔记
linux中管道符"|"的作用 命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象(下图应用别人的图片) 1. 例如: ps aux | grep "tes ...