mayan 游戏真是毒瘤
如题
真坑呀!!!
可算过了
我率先达到了氧气富有化
先是改变时没有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 游戏真是毒瘤的更多相关文章
- Luogu P1312 Mayan游戏(搜索)
P1312 Mayan游戏 题意 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个\(7\)行\(\times 5\)列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必 ...
- NOIP2011 Mayan游戏
3 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上 ...
- noip提高组2011 Mayan游戏
Mayan游戏 描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.**游戏通关 ...
- [题目] Luogu P1312 Mayan游戏
题面 题目描述 $ Mayan puzzle $是最近流行起来的一个游戏.游戏界面是一个 \(7行 \times 5列\)的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放 ...
- $Mayan$游戏
\(Mayan\)游戏 好啊,一年(半年)来的梦魇,终于结束了. 其实我从来没料到整体竟然会如此暴力--做的时候机房里冷得很,感觉晕晕乎乎地做完了,晕晕乎乎地调了好久,晕晕乎乎地听(看了题解的)\(q ...
- 洛谷P1312 Mayan游戏
P1312 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他 ...
- [Luogu 1312] noip11 Mayan游戏
[Luogu 1312] noip11 Mayan游戏 Problem: Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...
- luoguP1312 Mayan游戏 题解(NOIP2011)
luoguP1312 Mayan游戏 题目 #include<bits/stdc++.h> #define ll long long #define rg register #define ...
- 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
随机推荐
- 文献综述一:基于UML技术的商品管理系统设计与实现
一.基本信息 标题:基于UML技术的商品管理系统设计与实现 时间:2018 出版源:福建电脑 文件分类:uml技术的研究 二.研究背景 使用 UML 技术对商品管理系统进行了分析与研究,使用户对商品信 ...
- http 中的缓存
如何判断缓存新鲜度 If-Modified-Since告诉服务器, 在服务器中的响应报文中有一个Last-Modified字段, 如果两者一直则表示在浏览器中缓存的文件是最新的, 可以直接使用浏览器缓 ...
- jQuery 3 有哪些新东西
jQuery 的横空出世,至今已有十个年头了,而它的长盛不衰显然不是没有理由的.jQuery 提供了极为友好的接口,使得开发者们可以方便地进行 DOM 操作.发起 Ajax 请求.生成动画……不一而足 ...
- (转)Java实现Web Service过程中处理SOAP Header的问题
网上有篇文章,大致这么说的(如下文),最后我采用的wsimport -XadditionalHeaders的方式. StrikeIron offers two authentication meth ...
- C#开发usb通知之bulk传输
usb通信分为4种传输方式,下位机通信协议用的是块传输,也就是bulk传输,C#下实现的usb通信使用的是开源的LibUsbDotNet,主要的就是需要在C#中添加LibUsbDotNet.dll引用 ...
- sqlmap注入技巧
收集了一些利用Sqlmap做注入测试的TIPS,其中也包含一点绕WAF的技巧,便于大家集中查阅,欢迎接楼补充.分享. TIP1 当我们注射的时候,判断注入 http://site/script?id= ...
- Hibernate课程 初探多对多映射2-4 测试
package com.ddwei.test; import org.hibernate.Session; import org.hibernate.Transaction; import com.d ...
- cube.js 开源模块化分析框架
cube.js 是一款很不错的模块化web 应用分析框架.cube.js 的设计主要是面向serverless 服务, 但是同时也支持所有rdbms, cube.js不是一个单体应用,包含了以下部分: ...
- 微信小程序实战篇:商品属性联动选择(案例)
本期的微信小程序实战篇来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点奶茶. 效果演示: 商品属性联动.gif 代码示例 1.commodity.xml <!-- < ...
- 微信小程序实战篇:基于wxcharts.js绘制移动报表
前言 微信小程序图表插件(wx-charts)是基于canvas绘制,体积小巧,支持图表类型饼图.线图.柱状图 .区域图等图表图形绘制,目前wx-charts是微信小程序图表插件中比较强大好使的一个. ...