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 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
随机推荐
- redis的三种启动方式,个人常用第二种
redis的启动方式1.直接启动 进入redis根目录,执行命令: #加上‘&’号使redis以后台程序方式运行 1 ./redis-server & 2.通过指定配置文件启动 ...
- join合并字符串时使用生成器表达式
data=['11','pp','aa'] ','.join(str(d) for d in data)
- 阿里云主机windows系统Apache启用浏览器缓存的方法
一群友使用卡卡网的网站速度诊断工具诊断网站速度时,发现有几个需要优化的地方,其中较为重要的是“启用浏览器缓存”.诊断结果显示,网站尚未启用浏览器缓存. 图一:浏览器缓存未启用 群友找我帮忙设置一下,据 ...
- js跳转到邮箱登录
做邮箱验证时为了用户体验,往往会有跳转到邮箱登录这一按钮,其中的js如下: $("#btnemail").click(function () { var userEmail = $ ...
- [LeetCode]19. Remove Nth Node From End of List删除链表的倒数第N个节点
Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ...
- Excel数据导入数据库
maven依赖 <!--excel相关依赖--> <dependency> <groupId>org.apache.poi</groupId> < ...
- mysql常用的优化措施
http://www.cnblogs.com/ggjucheng/archive/2012/11/07/2758058.html
- c#真正判断文件类型
//真正判断文件类型的关键函数 public static bool IsAllowedExtension2(FileUpload hifile) { if (hifile != null) { Sy ...
- 转:解决Arcsde用户锁定的问题
采用arcgis平台做GIS应用的人,可能偶尔碰到sde用户锁定(Arccatalog 或应用程序异常退出的时比较多)的问题,往往咱们解决的办法是重启sde服务.如果一个服务器上有多个连接时,重启服务 ...
- SQL Stored Procedure and Function
Anything can be programmable with defined syntax and common lib. )) -- Add the parameters for the st ...