洛谷 P1312 [ NOIP 2011 ] Mayan游戏 —— 搜索+模拟
题目:https://www.luogu.org/problemnew/show/P1312
还是不擅长这种题,所以参考了一下TJ;
其实也很好搜,按字典序,先搜右移,再搜左移;
不交换相同颜色的两个格子,因为浪费;
左移就不交换了,避免重复,只有左边为空时左移;
写个处理下落的 fall 函数,再写个处理消格子的 refresh 函数(其中用到了 fall ),就可以方便地搜索了!
我存的是行和列,所以和坐标正好相反,一定要注意字典序的处理!
优美。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,mp[][][],ansx[],ansy[],ansm[];
bool vis[][];
void fall(int s)
{
for(int j=,sz;j<=;j++)
{
sz=;
for(int i=;i<=;i++)
if(mp[s][i][j])mp[s][++sz][j]=mp[s][i][j];
while(sz<)mp[s][++sz][j]=;//
}
}
void refresh(int s)
{
bool fl=;
while()
{
fl=; fall(s);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
if(!mp[s][i][j])continue;//
if(i<=&&mp[s][i][j]==mp[s][i+][j]&&mp[s][i][j]==mp[s][i+][j])
{
fl=;
vis[i][j]=vis[i+][j]=vis[i+][j]=;
}
if(j<=&&mp[s][i][j]==mp[s][i][j+]&&mp[s][i][j]==mp[s][i][j+])
{
fl=;
vis[i][j]=vis[i][j+]=vis[i][j+]=;
}
}
if(!fl)break;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(vis[i][j])mp[s][i][j]=,vis[i][j]=;
}
}
bool dfs(int s)
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)mp[s][i][j]=mp[s-][i][j];
refresh(s);
if(s>n)
{
for(int j=;j<=;j++)
if(mp[s][][j])return ;
return ;
}
for(int j=;j<=;j++)//字典序!
for(int i=;i<=;i++) if(mp[s][i][j])
{
if(j<&&mp[s][i][j]!=mp[s][i][j+])//
{
ansx[s]=i; ansy[s]=j; ansm[s]=;
swap(mp[s][i][j],mp[s][i][j+]);
if(dfs(s+))return ;
swap(mp[s][i][j],mp[s][i][j+]);
}
if(j>&&!mp[s][i][j-])//-1
{
ansx[s]=i; ansy[s]=j; ansm[s]=-;
swap(mp[s][i][j],mp[s][i][j-]);
if(dfs(s+))return ;
swap(mp[s][i][j],mp[s][i][j-]);
}
}
return ;
}
int main()
{
scanf("%d",&n);
for(int j=;j<=;j++)
for(int i=,x;i<=;i++)
{
scanf("%d",&x); if(!x)break;
mp[][i][j]=x;
}
if(dfs())//
{
for(int i=;i<=n;i++)
printf("%d %d %d\n",ansy[i]-,ansx[i]-,ansm[i]);//坐标!
}
else printf("-1\n");
return ;
}
洛谷 P1312 [ NOIP 2011 ] Mayan游戏 —— 搜索+模拟的更多相关文章
- NOIp 2011 mayan游戏 搜索
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- [NOIp 2011]Mayan游戏
Description Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏 ...
- NOIP 2011 Mayan游戏 大暴搜
题目链接:https://www.luogu.org/problemnew/show/P1312 我的第一篇题解!! 当然感谢ZAGER 的提示,他的链接https://www.cnblogs.com ...
- Noip2011 Mayan游戏 搜索 + 模拟 + 剪枝
写了一下午,终于AC了. 由于n<=5, 所以不需要太多的剪枝和技巧也能过.可以将操作后的消方块和下落和剪枝函数写到一个结构体中,这样会减少调试难度,更加简洁. 可以采用如下剪枝: 1. 如果当 ...
- 【noip】跟着洛谷刷noip题2
noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...
- 洛谷P1378 油滴扩展(搜索)
洛谷P1378 油滴扩展 直接暴力搜索更新答案就可以了. 时间复杂度为 \(O(n!)\) . #include<stdio.h> #include<stdlib.h> #in ...
- 洛谷 P3951 NOIP 2017 小凯的疑惑
洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...
- 洛谷P1312 Mayan游戏
P1312 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他 ...
- 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
随机推荐
- java代码完全手写模仿qq登录界面
这是我模仿QQ2015版界面,实现的基本功能有登陆验证,重置等,当然直接复制代码运行是不一样的,还要注意自己插入自己的图片. 结果截图如下所示: import java.awt.BorderLayou ...
- 攻破javascript面试的完美指南【译】
攻破javascript面试的完美指南(开发者视角) 0. 前言 本文适合有一定js基础的前端开发人员阅读.原文是我google时无意发现的, 被一些知识点清晰的解析所打动, 决定翻译并记录下来.这个 ...
- 小程序button默认样式透彻理解
微信小程序有一个默认样式,特别是有一个外边框,虽然看起来不别扭,但是自己每次设置border:0:都不生效,写成内联的样式也不生效,后来才知道里面的边框是伪元素的边框,这里的伪元素可以理解为用css动 ...
- HDU-4705 Y(思维+dfs树)
Input 4 1 2 1 3 1 4 Output 1 题意:给你一颗树,选择一个三个点构成的集合,使得这三个点不在一条直线上(意思就是 从一个点出发,用一条不回头的线不能将这三个点连起来)问一共有 ...
- Eclipse添加背景图片
①前言:我本人是一个比较喜新厌旧的人,经常换头像,背景图片之类的,喜欢折腾,哈哈,所以每次都上网查怎么修改背景图片比较麻烦,这里也记录一下怎么修改. ②原文链接:https://yq.aliyun.c ...
- Python的/整除
在python3和python2里,正整数的/结果是一样的,但是负数的整除却有区别 比如python3中,-1/2是等于0的,c/c++的结果也是这样, 但在python2中,-1/2确是-1,想要得 ...
- 洛谷 1803 凌乱的yyy
[题意概述] 给出100W个区间,要求找出尽量多的区间满足它们互补重叠,输出最大的区间数. [题解] 贪心. 对区间按照右端点从小到大排序,然后逐个加入合法区间即可. #include<cstd ...
- Hdu 4864(Task 贪心)(Java实现)
Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...
- BNUOJ 23905 滑雪
滑雪 Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on UESTC. Original ID: 13096 ...
- ACM数论常用知识完全解读
此版本纯属扯淡....... 一个一个来起.