如题

真坑呀!!!

可算过了

我率先达到了氧气富有化

先是改变时没有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

mayan 游戏真是毒瘤的更多相关文章

  1. Luogu P1312 Mayan游戏(搜索)

    P1312 Mayan游戏 题意 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个\(7\)行\(\times 5\)列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必 ...

  2. NOIP2011 Mayan游戏

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

  3. noip提高组2011 Mayan游戏

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

  4. [题目] Luogu P1312 Mayan游戏

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

  5. $Mayan$游戏

    \(Mayan\)游戏 好啊,一年(半年)来的梦魇,终于结束了. 其实我从来没料到整体竟然会如此暴力--做的时候机房里冷得很,感觉晕晕乎乎地做完了,晕晕乎乎地调了好久,晕晕乎乎地听(看了题解的)\(q ...

  6. 洛谷P1312 Mayan游戏

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

  7. [Luogu 1312] noip11 Mayan游戏

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

  8. luoguP1312 Mayan游戏 题解(NOIP2011)

    luoguP1312 Mayan游戏 题目 #include<bits/stdc++.h> #define ll long long #define rg register #define ...

  9. 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏

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

随机推荐

  1. Vue.js-----轻量高效的MVVM框架(九、组件利用Props传递数据)

    #使用props传递数据 html:传递普通的字符串 <h3>#使用props传递数据</h3> <div id="dr01"> <div ...

  2. leetcode 892. 三维形体的表面积

    题目描述: 在 N * N 的网格上,我们放置一些 1 * 1 * 1  的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上. 返回最终形体的表面积. ...

  3. UGUI 哪些显示在前方的问题

    1.对于一个场景里不同的Canvas来说,越最后创建的或者越最后激活的Canvas,越显示在前方. 2.对于同一个Canvas里的UI来说在Hierarchy面板越靠下越显示在前方.

  4. 在Application_Error获取Asp.Net未处理异常信息

    在Application_Error获取Asp.Net未处理异常信息 protected void Application_Error(object sender, EventArgs e) { // ...

  5. 亲测SQLServer的最大连接数

    很多做架构设计.程序开发.运维.技术管理的朋友可能或多或少有这样的困惑: SQLServer到底支持多少连接数的并发? SQLServer是否可以满足现有的应用吗? 现有的技术架构支持多少连接数的并发 ...

  6. .NET面试题5

    常见面试题目: 1. const和readonly有什么区别? 2. 哪些类型可以定义为常量?常量const有什么风险? 3. 字段与属性有什么异同? 4. 静态成员和非静态成员的区别? 5. 自动属 ...

  7. JavaScript Hacks

    JavaScript Hacks,很多都是在网上看到的,觉得好就记下来了.在这里给大家推荐一个项目,里面很多代码片段都值得学习https://github.com/Chalarangelo/30-se ...

  8. JS在与lua的交互心得

    最近在写一个项目,前端技术使用的是Vue,在与lua的交互过程,是通过一个公共JS,前端调用公共js的方法给lua发送命令,lua接到命令,去执行一些方法,然后又通过回调返回到了前端,由于是第一次写这 ...

  9. spring-cloud构架微服务(1)-全局配置

    使用spring-cloud是基于熟悉springboot基础上进行的.本篇介绍全局配置,spring-boot版本就以1.4.0来做吧.项目地址: https://git.oschina.net/b ...

  10. 当你的域名是数字开头时如何命名java包路径

    例如:域名是1001y.net 理想的包路径是net.1001y,但由于java命名规范的问题,首字母不能为数字,这时我们只有两种选择: 1,net.$1001y 使用$符号作为首字母. 2,net. ...