如题

真坑呀!!!

可算过了

我率先达到了氧气富有化

先是改变时没有fall。40分

然后是fall函数写慢了 tle 50分


.


上代码

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{int m[6][9];bool era[6][9];int t[15];bool can(){bool ca=false;for(int i=1;i<=5;i++)for(int j=1;m[i][j];j++){if(j-1&&m[i][j-1]==m[i][j]&&m[i][j]==m[i][j+1]&&m[i][j-1]==m[i][j+1])//暴力判断是否可以消除 {era[i][j-1]=era[i][j]=era[i][j+1]=true;//ps 如果是多于四个方格,我们可以拆成3个方格重叠。这也就是为什么要era消除标记,而不是直接消除 ca=true;}if(i-1&&m[i-1][j]==m[i][j]&&m[i][j]==m[i+1][j]&&m[i-1][j]==m[i+1][j]){era[i-1][j]=era[i][j]=era[i+1][j]=true;//所以,这样的话,十字行就可以处理了 ca=true;    }}return ca;}void fall(){int pass[50],top;for(int i=1;i<=5;i++) {top=0;for(int j=1;j<=7;j++)if(m[i][j])//先从下到上扫一遍,将有颜色的 方格储存下来。 {pass[++top]=m[i][j];m[i][j]=0;}for(int j=1;j<=top;j++)m[i][j]=pass[j];//再安回去 }}void clear(){for(int i=1;i<=5;i++)for(int j=1;j<=7;j++)if(era[i][j])//照着标记消就可以了 {m[i][j]=0;t[m[i][j]]-=1;era[i][j]=false;//顺便重置一下 }fall();//掉落 }bool judge1(){int sum=0;for(int i=1;i<=5;i++)for(int j=1;j<=5;j++)   sum+=m[i][j];return sum;//全0时结束 }bool judge2(){for(int i=1;i<=10;i++)t[i]=0;for(int i=1;i<=5;i++)for(int j=1;j<=7;j++)t[m[i][j]]+=1;for(int i=1;i<=10;i++)if(t[i]>=1&&t[i]<=2)return true;return false;//如果一种颜色的方格的个数大于1而且小于2,那么这种颜色的方块一定就消不了了,直接退出 }
};
node a;
int n;
bool found;
int stack[5555][3];
void dfs(int step)
{if(a.judge2())return ;if(found)return ;if(step==n){if(a.judge1()) return ;found=true;return ;}node b=a;for(int i=1;i<=5;i++)for(int j=1;j<=7;j++){if(a.m[i][j]!=a.m[i+1][j]&&i+1!=6&&a.m[i][j]){swap(a.m[i][j],a.m[i+1][j]);a.fall();while(a.can())a.clear();dfs(step+1);a=b;stack[step][0]=i;stack[step][1]=j;stack[step][2]=1;}if(found)return;if(!a.m[i-1][j]&&a.m[i][j]&&i-1!=0){swap(a.m[i][j],a.m[i-1][j]);a.fall();while(a.can())a.clear();dfs(step+1);a=b;stack[step][0]=i;stack[step][1]=j;stack[step][2]=-1;if(found)return ;}}
}
int main()
{scanf("%d",&n);int j=1;for(int i=1;i<=5;i++){j=1;scanf("%d",&a.m[i][j]);a.t[a.m[i][j]]+=1;while(a.m[i][j]){j+=1;scanf("%d",&a.m[i][j]);a.t[a.m[i][j]]+=1;}}while(a.can())a.clear();dfs(0);if(found){for(int i=0;i<n;i++)printf("%d %d %d\n",stack[i][0]-1,stack[i][1]-1,stack[i][2]);return 0;}printf("-1");return 0;
}

对于这道题

难点我觉得不是思维的难度

而是码力。真的时纯靠码力

以及算法的优化

fall函数我一开始就写了个n^2算法

华丽丽的tle

转载于:https://www.cnblogs.com/Lance1ot/p/8705618.html

mayan 游戏真是毒瘤相关推荐

  1. P1312 Mayan游戏 [模拟][搜索]

    P1312 Mayan游戏 这道题跟斗地主都是大模拟啊!稍微挂一点可能就爆零了! 图肯定能存,直接二维数组扔进去即可. 然后套dfs模板,搜索就先照那样搜. 核心操作有两个:一个是判断那些块可以消掉, ...

  2. [Luogu 1312] noip11 Mayan游戏

    [Luogu 1312] noip11 Mayan游戏 Problem: Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

  3. 洛谷P1312 Mayan游戏

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

  4. 明日之后哪个服务器最多主播,明日之后:主播成游戏最大毒瘤,玩家列举三大“罪状”,很真实!...

    原标题:明日之后:主播成游戏最大毒瘤,玩家列举三大"罪状",很真实! ​​ 大家好,欢迎收看本期的明日游戏说.上一期跟大家介绍了玩家研究出配方台秘诀,抽中概率高达80%!感兴趣的小 ...

  5. NOIP Mayan游戏

    描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定的步数内消 ...

  6. Noip2011 dayt3 Mayan游戏

    Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7 行5 列的棋盘,上面堆放 着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 戏通关是指在规定的步数 ...

  7. 洛谷P1312 [NOIP2011 提高组] Mayan 游戏 题解

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

  8. 题解 Mayan游戏

    @luogu 搜索剪枝题,每一次暴力下落,暴力消除 #include<cstdio> #include<cstring> #include<algorithm> # ...

  9. DDoS攻击:国内棋牌游戏的“毒瘤”

    如今,休闲网络游戏独具多种娱乐性,极易融入我们的日常生活,庞大的中国网民数量吸引了不少游戏厂商转型和投资,不管是网游.端游,还是手游,都得到了迅速发展,特别是棋牌类游戏,而棋牌本身在中国具有较长的文化 ...

  10. Linux上最受欢迎的10款游戏

    Linux 作为一个不断成长的操作系统,近年来已经拥有了很多很好的游戏,以下是 Linux 下最受欢迎的 10 款游戏: Dota 2:一个电竞游戏,拥有大量的LoL玩家以及 Dota 玩家. Cou ...

最新文章

  1. 崛起于Springboot2.X之Mybatis-全注解方式操作Mysql(4)
  2. 最前线|爱奇艺低调上线“好多视频”,短视频战场的主动防御
  3. SQL Server服务器名称填写IP不能访问问题解决
  4. Activiti工作流实战-2
  5. k8s master 节点加入到可以调配node节点中的命令
  6. SQL Server存储过程(转载)
  7. 新疆大学OJ(ACM) 1047: string 字符串排序
  8. matlab绘制sign函数,MATLAB的Symbolic Math Toolbox详解
  9. 使命召唤16正在获取cdn地址_玩机不求人 | 简单教程,爽玩《使命召唤:战区》攻略!...
  10. 智能合约从入门到精通:完整范例
  11. 两个字符串的最长公共子序列长度_程序员编程算法,解决文本相似度问题的最长公共子序列算法!...
  12. 【计算机网络】比较TCP与UDP
  13. stm32编码器正反转计数程序_第六章:STM32CubeMx 定时器编码器模式基本使用方法...
  14. Flutter之BuilderContext和Widget关系浅析
  15. Gprinter Android SDK V2.1 使用说明
  16. java大牛博客链接合集
  17. java 查看类常量池_Java中常量以及常量池
  18. 儿童手表电话卡遇到问题需要怎么解决
  19. matlab读取nc\hdf\grd等气象文件 自用
  20. 【故障分析】基于matlab GUI蚁群算法故障诊断【含Matlab源码 931期】

热门文章

  1. 公式推导 11-14
  2. python 金融可视化_Python数据分析:金融数据可视化
  3. 电脑已安装软件提取安装包_SPSS 24,软件安装包及安装教程
  4. 操作系统课设 Nachos 实验一:Nachos 系统的安装与调试
  5. 计算机操作系统详细学习笔记(二):处理器管理
  6. XXX required a bean of type ‘XXXXXXXX‘ that could not be found ,博客可帮忙找错
  7. mybatis在指定库建表_搭建MyBatis开发环境及基本的CURD介绍
  8. java我的世界显示合成表_我的世界:若从你的背包移除“合成表”,回到5年前,最原始状态...
  9. Eclipse 下载安装
  10. openjudge1.2