纯搜索,,,模拟,,还不算太难,,就是细节略繁琐
  首先因为题目要求保证字典序,所以显然把右边的块换到左边不如把左边的块换到右边优,
所以可以进行不小规模的剪枝,之后显然交换两块相同的色块没有意义,至此基本可以通过,在clear过程中最好对即将删除的色块打标记再统一删除,以避免出现意外情况,同时每次clear之后要在进行fall处理,因为每次操作可能引发连锁反应
  两次没过样例, 第一次手抖把x 打成了x + 1, 第二次写fall时忘记将之前落下的删掉
  WA掉一次,读入时以为每行最多7个数,忘记考虑结尾的0
 #include <cstdio>
#include <cstring>
#include <algorithm>
//#define debug
//#define debug2 const int maxn = ;
int n;
int m[maxn][maxn][maxn];
int f[maxn][maxn];
int ans[][]; bool cl(int x) {
memset(f, , sizeof(f));
for (int i = ; i <= ; i++)
for (int j = ; j <= ; j++) {
if (m[x][i][j] == ) break;
if (f[i][j] != && i > && m[x][i-][j] == m[x][i][j] && m[x][i-][j] == m[x][i][j]) {
f[i-][j] = ;
f[i-][j] = ;
f[i][j] = ;
int cur = i + ;
while (cur <= && m[x][cur][j] == m[x][i][j]) {
f[cur][j] = ;
cur++;
}
cur = i - ;
while (cur > && m[x][cur][j] == m[x][i][j]) {
f[cur][j] = ;
cur--;
}
}
if (f[i][j] != && j > && m[x][i][j-] == m[x][i][j] && m[x][i][j-] == m[x][i][j]) {
f[i][j-] = ;
f[i][j-] = ;
f[i][j] = ;
int cur = j + ;
while (cur <= && m[x][i][cur] == m[x][i][j]) {
f[i][cur] = ;
cur++;
}
cur = j - ;
while (cur > && m[x][i][cur] == m[x][i][j]) {
f[i][cur] = ;
cur--;
}
}
}
bool is_c = ;
for (int i = ; i <= ; i++)
for (int j = ; j <= ; j++) {
if (f[i][j] > ) {
is_c = ;
m[x][i][j] = ;
}
}
return (is_c);
} void fall(int x) {
for (int i = ; i <= ; i++) {
int cur = ;
for (int j = ; j <= ; j++) {
if (m[x][i][j] > ) {
cur++;
m[x][i][cur] = m[x][i][j];
if (j != cur) m[x][i][j] = ;
}
}
}
} void dfs(int x) {
#ifdef debug
for (int i = ; i <= n; i++) {
printf("%d %d %d\n", ans[i][], ans[i][], ans[i][]);
}
printf("\n\n");
#endif
#ifdef debug2
if (ans[][] == && ans[][] == && ans[][] == ) {
printf("kkk\n");
}
#endif
if (x == n + ) {
fall(x);
cl(x);
fall(x);
while (cl(x)) fall(x);
for (int i = ; i <= ; i++)
for (int j = ; j <= ; j++) {
if (m[x][i][j] > ) return;
}
for (int i = ; i <= n; i++) {
printf("%d %d %d\n", ans[i][], ans[i][], ans[i][]);
}
exit();
}
for (int i = ; i <= ; i++)
for (int j = ; j <= ; j++) {
if (m[x][i][j] == ) continue;
if (i < && m[x][i+][j] == ) {
memcpy(m[x+], m[x], sizeof(m[x]));
m[x+][i+][j] = m[x][i][j];
m[x+][i][j] = ;
fall(x + );
while (cl(x + )) fall(x + );
ans[x][] = i - ;
ans[x][] = j - ;
ans[x][] = ;
dfs(x + );
}
if (i < && m[x][i+][j] > && m[x][i+][j] != m[x][i][j]) {
memcpy(m[x+], m[x], sizeof(m[x]));
m[x+][i+][j] = m[x][i][j];
m[x+][i][j] = m[x][i+][j];
fall(x + );
while (cl(x + )) fall(x + );
ans[x][] = i - ;
ans[x][] = j - ;
ans[x][] = ;
dfs(x + );
}
if (i > && m[x][i-][j] == ) {
memcpy(m[x+], m[x], sizeof(m[x]));
m[x+][i-][j] = m[x][i][j];
m[x+][i][j] = ;
fall(x + );
while (cl(x + )) fall(x + );
ans[x][] = i - ;
ans[x][] = j - ;
ans[x][] = -;
dfs(x + );
}
}
} int main () {
scanf("%d", &n);
for (int i = ; i <= ; i++) {
for (int j = ; j <= ; j++) {
scanf("%d", &m[][i][j]);
if (m[][i][j] == ) break;
}
}
dfs();
printf("-1\n");
return ;
} /*
1
1 0
2 1 0
2 1 4 0
3 4 0
2 3 3 4 0
*/

mayan 游戏 search的更多相关文章

  1. $Mayan$游戏

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

  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. 洛谷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 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

随机推荐

  1. AT1145 ホリドッグ

    洛谷的题解区里竟然没有O(1)做法详解-- 题面就是要判断\(1+2+\dots+n\)是不是素数 很容易让人想到上面的式子事实上等于\(n(n+1)/2\) 根据质数的定义,质数只能被1和自身整除 ...

  2. 【codeforces 743E】Vladik and cards

    [题目链接]:http://codeforces.com/problemset/problem/743/E [题意] 给你n个数字; 这些数字都是1到8范围内的整数; 然后让你从中选出一个最长的子列; ...

  3. 2015 Multi-University Training Contest 3 hdu 5325 Crazy Bobo

    Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total ...

  4. Spring注解+Axis2开发WebService

    用Spring注解方式: 配置扫描指定包下的类 <context:component-scan base-package="包名" />   标识类为spring管理的 ...

  5. POJ——T2186 Popular Cows || 洛谷——P2341 [HAOI2006]受欢迎的牛

    http://poj.org/problem?id=2186 || https://www.luogu.org/problem/show?pid=2341 Time Limit: 2000MS   M ...

  6. 洛谷 P1894 [USACO4.2]完美的牛栏The Perfect Stall

    P1894 [USACO4.2]完美的牛栏The Perfect Stall 题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星 ...

  7. 菜鸟学Struts——I18N对国际化的支持

    大家肯定都喜欢玩游戏吧. 对于是一个游戏迷的话,肯定玩过不少很棒的经典单机游戏.比方说,国产的<古墓丽影>.<刺客信条>.<鬼泣>国产的仙剑.古剑等.在众多游戏系列 ...

  8. C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...

  9. 多本Web前端深度修炼书籍(提供网盘下载链接)

    书籍介绍:这本书涵盖了html5新增标签和功能,而且提供了jquerymobile,Phonegap,Sencha Touch框架的介绍和应用,最后还带了一个移动web应用的样例,绝对是移动web开发 ...

  10. FZU_Problem 2168 防守阵地 I

    Problem 2168 防守阵地 I Accept: 128 Submit: 392 Time Limit: 3000 mSec Memory Limit : 32768 KB Problem De ...