luogu1312
超有趣的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的更多相关文章
- luogu1312 Mayan游戏 剪枝
题目大意 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个77 行\times 5×5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
- [noip2011 luogu1312] Mayan游戏(模拟)
原题:传送门 大模拟- 两个剪枝: 1.如果左边不为空就不往左边走(因为一定不如左边的移到右边优) 2.如果相邻两颜色相同不需移动 当然也有别的小剪枝(我没写)比如如果当前某一颜色剩余块数满足1< ...
随机推荐
- Docker学习4-Containers - 容器
用Docker方式构建应用程序,从这个应用程序层次结构的底层容器开始.高于此级别的是一项服务,它定义了容器在生产中的行为方式.在顶层是堆栈,它定义了所有服务的交互. Stack 堆栈 Service ...
- JavaScript模块化思想之入门篇
在写正文之前先写一点废话,从我大三下学期正式接触前端到现在,已经六个月了.自己从HTML,CSS,简单的JS验证开始,一点点开始走入前端的世界.越发的感觉前端这一领域散发着无穷的魅力,也许这和我真心喜 ...
- day 11 前方高能-迭代器
第一类对象 -----函数名 == 变量名 函数对象可以像变量一样进行赋值 还可以作为列表的元素进行使用 可以作为返回值返回 def wrapper(): def inner(): ...
- China Cloud Computing Conference(2018.07.24)
时间:2018.07.24地点:北京国家会议中心
- Getting Start chrome-extension demo
写一个小小的chrome扩展demo~ 准备工作 了解一下插件chrome-extension: 在应用商店里的插件基本上都是以.crx为文件后缀,该文件其实就是一个压缩包,包括插件所需要的html. ...
- EZ 2018 04 21 NOIP2018 模拟赛(九)
终于停止了掉Rating的浪潮! 猥琐的链接 这次200分才Rank10,而且很多人并列 庆幸T2最后20分钟发现期望的算法打错了,然后拿到了50pts,250收场 T1 水题*1 这道题不仅做过,而 ...
- Luogu P3227 [HNOI2013]切糕
%%ZZKdalao上课讲的题目,才知道网络流的这种玄学建模 我们先想一想,如果没有D的限制,那么想当于再每一根纵轴上选一个权值最小的点再加起来 我们对应在网络流上就是每一根纵轴上的点向它下方的点用权 ...
- Kubernetes学习之路(二十四)之Prometheus监控
目录 1.Prometheus概述 2.Prometheus部署 2.1.创建名称空间prom 2.2.部署node_exporter 2.3.部署prometheus-server 2.4.部署ku ...
- C++ STL 学习笔记__(8)map和multimap容器
10.2.9 Map和multimap容器 map/multimap的简介 ² map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. ² ...
- ElasticSearch入门 第九篇:实现正则表达式查询的思路
这是ElasticSearch 2.4 版本系列的第九篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...