这道题超级好 就是我太菜了写了几个小时不算是debug了几个小时。

我只想出了几个小剪枝 可能是状态不太好吧 写完这道题真的是完美诠释了什么,叫做:

暴力出奇迹!!! 真的是太暴力了.

最多只移动5步 时间复杂度为 35^5但是并非如此 因为要下落什么的还要消除什么的还要重新赋值什么的。

这样的复杂度为(35*35)^5= 1225^5 早 超时了 但是剪枝的力量是无穷的!

有 交换两个相同颜色块减掉 当前局面有某种颜色数量<=2减掉 如果右边是空的我们再考虑向左移动否则就全部向右移动

大体上就这几个。 练习了一下dfs 没想到 错误百出。

1 fall 的时候 没想清楚 应该怎么下落

2 剪枝的不够精准

3 i j 疯狂打错 0 疯狂打成1

4 内外循环没分清

5 细枝末节j 打成j-1

6 以为函数传递数组回溯时该数组原本的值不会改变,其实是会改变的。

7 没有充分考虑好细节 什么时候需要fall没考虑清楚

8 最后 本人菜的要死。照着题解代码拍还拍了几个小时才全部改出来
9 缺乏勇气 感觉要超时就不敢写 没了 气死了。。。

//#include<bits/stdc++.h>
#include<iomanip>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<deque>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<stack>
#include<algorithm>
#include<vector>
#include<cctype>
#include<utility>
#include<set>
#include<bitset>
#include<map>
#define INF 2147483646
#define ll long long
#define min(x,y) (x>y?y:x)
#define max(x,y) (x>y?x:y)
#define R register
#define up(p,i,n) for(int i=p;i<=n;++i)
using namespace std;
char buf[<<],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;
}
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void put(ll x)
{
x<?x=-x,putchar('-'):;
int num=;char ch[];
while(x)ch[++num]=x%+'',x/=;
num==?putchar(''):;
while(num)putchar(ch[num--]);
putchar('\n');return;
}
int n=,m=,b,T,flag;
int vis[][];
int a[][],cnt[];
struct wy
{
int x,y,k;
}t[];
int move()
{
int flag=;
up(,i,n)up(,j,m)
{
if(!a[i][j])continue;
if(j<=m-)if(a[i][j]==a[i][j+]&&a[i][j]==a[i][j+])
vis[i][j]=vis[i][j+]=vis[i][j+]=,flag=;
if(i<=n-)if(a[i][j]==a[i+][j]&&a[i][j]==a[i+][j])
vis[i][j]=vis[i+][j]=vis[i+][j]=,flag=;
}
return flag;
}
void fall()
{
up(,i,n)up(,j,m)if(vis[i][j])a[i][j]=;
up(,j,m)
up(,i,n)
{
if(!a[i][j])
{
up(i+,k,n)
if(a[k][j]){a[i][j]=a[k][j];a[k][j]=;break;}
}
}
memset(vis,,sizeof(vis));
return;
}
void dfs(int depth)
{
if(depth==b+)
{
int flag=;
up(,i,n)up(,j,m)if(a[i][j]){flag=;break;}
if(!flag)
{
up(,i,b)printf("%d %d %d\n",t[i].x,t[i].y,t[i].k);
exit();
}
return;
}
up(,i,n)up(,j,m)cnt[a[i][j]]++;
up(,i,)if(cnt[i]==||cnt[i]==)return;
int tmp[][];
up(,i,n)up(,j,m)tmp[i][j]=a[i][j];
up(,j,m)
{
up(,i,n)
{
if(!a[i][j])continue;
if(a[i][j]!=a[i][j+]&&j+<=m)
{
swap(a[i][j],a[i][j+]);
t[depth]=(wy){j,i,};
fall();
while(move())fall();
dfs(depth+);
up(,i,n)up(,j,m)a[i][j]=tmp[i][j];
}
if(j->=&&a[i][j-]==)
{
swap(a[i][j],a[i][j-]);
t[depth]=(wy){j,i,-};
fall();
while(move())fall();
dfs(depth+);
up(,i,n)up(,j,m)a[i][j]=tmp[i][j];
}
}
}
}
int main()
{
//freopen("1.in","r",stdin);
b=read();
up(,i,m)
{
int t=,x;
while()
{
x=read();
if(x==)break;
a[t][i]=x;
++t;
}
}
/*for(int i=n;i>=0;--i)
{
for(int j=0;j<=m;++j)cout<<a[i][j]<<' ';
puts("");
}*/
dfs();
put(-);
return ;
}
无法逃避的是自我,而无法挽回的是过去。——机动战士高达

mayan游戏的更多相关文章

  1. NOIP2011 Mayan游戏

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

  2. noip提高组2011 Mayan游戏

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

  3. [题目] Luogu P1312 Mayan游戏

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

  4. $Mayan$游戏

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

  5. 洛谷P1312 Mayan游戏

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

  6. [Luogu 1312] noip11 Mayan游戏

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

  7. luoguP1312 Mayan游戏 题解(NOIP2011)

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

  8. Luogu P1312 Mayan游戏(搜索)

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

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

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

  10. NOIp 2011 mayan游戏 搜索

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

随机推荐

  1. 第五节,python基本语法

    1.类(Class) Python中的类的概念与其它语言类似,比较特殊的是protected和private在python中没有明确的限制,通常的惯例是用单下划线_表示protected,用双下划线开 ...

  2. python结合pyvmomi批量关闭vmware虚拟机

    #!/usr/bin/env python #参考https://github.com/vmware/pyvmomi/blob/master/sample/poweronvm.py "&qu ...

  3. 再见,Python!你好,Go语言

    Go 语言诞生于谷歌,由计算机领域的三位宗师级大牛 Rob Pike.Ken Thompson 和 Robert Griesemer 写成.由于出身名门,Go 在诞生之初就吸引了大批开发者的关注.诞生 ...

  4. java基础学习总结——面向对象1

    目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向 ...

  5. CentOS7.6 yum方式安装mysql2.7.25

    在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB 1 下载并安装MySQL官方的 Yum Rep ...

  6. django-admin.py startproject testdj 失败 没有工程文件夹

    今天第一次用django创建工程时一直没有反应,没有期望的文件夹出现 第一种:网上查找了一下,发现是因为py文件的默认打开不是python.exe,而是编辑器 解决方法:先随便找一个py文件,点击右键 ...

  7. Python内置模块之-hashlib

    一 .概述 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 摘要算法的特点 不论data大小,摘要结果是固定长度 单向函数, ...

  8. [原创]基于Zynq AXI-GPIO Standalone & Linux 例程

    基于Zynq AXI-GPIO Standalone & Linux 例程 待添加完善中

  9. SQL允许脏读WITH(NOLOCK)

    使用WIHT(NOLOCK)有利也有弊,所以在决定使用之前,你一定需要了解清楚WITH(NOLOCK)的功能和缺陷,看其是否适合你的业务需求,不要觉得它能提升性能,稀里糊涂的就使用它. --事务未提交 ...

  10. Angular路由——路由基础

    一.路由相关对象 Router和RouterLink作用一样,都是导航.Router是在Controller中用的,RouterLink是在模版中用到. 二.路由对象的位置 1.Routes对象 配置 ...