有趣的题面

超有趣的dfs大模拟,码了巨久,卡时过了此题qaq

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,mp[][][];
struct answer{int x,y,op;}re[];
bool arr[][];
inline void fall(int now)
{
int i,j,sz;
for(i=;i<=;i++)
{
sz=;
for(j=;j<=;j++)
{
if(mp[now][i][j]) mp[now][i][sz++]=mp[now][i][j];
}while(sz<) mp[now][i][sz++]=;
}
}//顾名思义模拟方块掉落
inline void chag(int now)
{
int i,j; bool bo=;
for(bo=;bo;)
{
bo=; fall(now);
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(mp[now][i][j])
{
if(i<)
{
if(mp[now][i][j]==mp[now][i+][j]&&mp[now][i][j]==mp[now][i+][j])
{
bo=arr[i][j]=arr[i+][j]=arr[i+][j]=;
}
}
if(j<)
{
if(mp[now][i][j]==mp[now][i][j+]&&mp[now][i][j]==mp[now][i][j+])
{
bo=arr[i][j]=arr[i][j+]=arr[i][j+]=;
}
}
}
}
}
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(arr[i][j]) arr[i][j]=mp[now][i][j]=;
}
}
}
}//找到所有连续3个的方块删去,就是这么丑qaq
inline bool dfs(int now)
{
int i,j; for(i=;i<=;i++)for(j=;j<=;j++)mp[now][i][j]=mp[now-][i][j]; chag(now);
if(now==n+)
{
for(i=;i<=;i++)if(mp[now][i][])return false; return true;
}
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(mp[now][i][j])
{
if(i<&&mp[now][i][j]!=mp[now][i+][j])//交换相同的毫无意义
{
re[now].x=i; re[now].y=j; re[now].op=;
swap(mp[now][i][j],mp[now][i+][j]);
if(dfs(now+))return true;//暴力搜索
swap(mp[now][i][j],mp[now][i+][j]);//回溯
}
if(i&&!mp[now][i-][j])//如果上一个有的话显然是向右交换字典序更小啊
{
re[now].x=i; re[now].y=j; re[now].op=-;
swap(mp[now][i][j],mp[now][i-][j]);
if(dfs(now+))return true;//搜搜搜
swap(mp[now][i][j],mp[now][i-][j]);
}
}
}
}return false;
}
int main()
{
int i,j,x,bo; scanf("%d",&n); memset(arr,,sizeof arr);
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
scanf("%d",&x); if(!x)break; mp[][i][j]=x;
}
}bo=dfs(); if(!bo)return *printf("-1\n");
for(i=;i<=n;i++)printf("%d %d %d\n",re[i].x,re[i].y,re[i].op);
}

luogu1312的更多相关文章

  1. luogu1312 Mayan游戏 剪枝

    题目大意 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个77 行\times 5×5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

  2. [noip2011 luogu1312] Mayan游戏(模拟)

    原题:传送门 大模拟- 两个剪枝: 1.如果左边不为空就不往左边走(因为一定不如左边的移到右边优) 2.如果相邻两颜色相同不需移动 当然也有别的小剪枝(我没写)比如如果当前某一颜色剩余块数满足1< ...

随机推荐

  1. Python2.7-datetime

    datetime 模块用于操作日期时间模块内定义了5个类:date,time,datetime,timedelta,tzinfo 1.timedelta对象,代表一个时间间隔datetime.time ...

  2. openstack vm ping 114.114.114.114

    route add -net 0.0.0.0 netmask 0.0.0.0 gateway 192.168.0.131 route del -net 0.0.0.0 netmask 0.0.0.0 ...

  3. day63

    一.环境搭建 1.安装node 去官网下载node安装包 傻瓜式安装 万一安装后终端没有node环境,要进行node环境变量的配置(C:\Program Files\nodejs) 可以通过node提 ...

  4. Drupal性能优化:蜜蜂培训性能优化一

    大家一直都说Drupal的性能不怎么样,跑起来慢,即使不是在用户量大的时候,最近公司的蜜蜂培训产品在一个客户的使用过程中,由于用户量及数据量的激增,就遇到了比较大的性能问题,这篇文章就记录了整个优化过 ...

  5. Xcode7如何真机调试

    查阅网上Xcode7如何真机调试,教程我觉得都有点繁琐,然后我自己用3步实现真机测试: 1.左上角Xcode  -->  Perferences  -->  Accounts  --> ...

  6. Hadoop Version History and Feature

    Versions and Features Hadoop has seen significant interest over the past few years. This has led to ...

  7. 如何测试Oracle并行执行的并行度状况

    如何测试Oracle并行执行的并行度状况: 可以通过如下的脚本,来查看要求的并行度,和实际获得的并行度. 脚本来自: http://askdba.org/weblog/forums/topic/que ...

  8. 【Qt】QOpenGLWidget展示蒙版效果

    关键代码是派生QOpenGLWidget,覆写paintEvent函数 QPainter p; p.begin(this); p.drawImage(QPoint(, ), m_Img); QLine ...

  9. TKmath Package gp数据类型

    点,向量,方向 二维:gp_Pnt2d, gp_Vec2d, gp_Dir2d:它们的内部都存储 gp_XY 三维:gp_Pnt, gp_Vec, gp_Dir:它们的内部都存储 gp_XYZ 轴向与 ...

  10. Muduo学习笔记(一) 什么都不做的EventLoop

    Muduo学习笔记(一) 什么都不做的EventLoop EventLoop EventLoop的基本接口包括构造.析构.loop(). One Loop Per Thread 一个线程只有一个Eve ...