mayan 游戏 search
#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的更多相关文章
- $Mayan$游戏
\(Mayan\)游戏 好啊,一年(半年)来的梦魇,终于结束了. 其实我从来没料到整体竟然会如此暴力--做的时候机房里冷得很,感觉晕晕乎乎地做完了,晕晕乎乎地调了好久,晕晕乎乎地听(看了题解的)\(q ...
- NOIP2011 Mayan游戏
3 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上 ...
- noip提高组2011 Mayan游戏
Mayan游戏 描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.**游戏通关 ...
- [题目] Luogu P1312 Mayan游戏
题面 题目描述 $ Mayan puzzle $是最近流行起来的一个游戏.游戏界面是一个 \(7行 \times 5列\)的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放 ...
- 洛谷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 ...
- Luogu P1312 Mayan游戏(搜索)
P1312 Mayan游戏 题意 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个\(7\)行\(\times 5\)列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必 ...
- 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
随机推荐
- [BZOJ1322]Destroying The Graph
题目大意:有一张有向图,对于每个点,有两种操作:1. 删掉它的所有入边2. 删掉它的所有出边对每个点的每个操作均有不同的价值.求使得图上没有边的最小价值.解题思路:考虑把点拆成入点和出点,然后就是二分 ...
- web前端开发技术栈分析图
- Python学习笔记(一):基本数据类型
在Python3种,有六种标准数据类型: 数字(Number) 字符串(String) 列表(List) 元组(Tuple) 集合(Set) 字典(Dictionary) 这六种数据类型中,数字类型和 ...
- Virtual Box 新建一个虚拟机安装系统(补充:WIN7 64 bit 系统虚拟机无法安装 64 bit 系统问题)
1.安装Virtual Box好后,点击新建 2.配置内存大小,这个根据自己需要配置就好 3.创建虚拟硬盘 这里选择固定分配.动态分配都可以,接下来就分配硬盘大小了 4.新建好后我们点击刚才建立的虚拟 ...
- ubuntu设置PATH
试了好多遍,多无效.. 最后在/etc/enviroment下设置才有效. 不过让有一些未解问题 我使用sudo su 进入到root用户权限,设置完成的. 重新使用sudo -s进入root用户权限 ...
- BCB使用线程删除目录中的图片
BCB新建线程DeleteImgThread类.其会默认继承Thread类,然后在Execute函数中编写代码, void __fastcall DeleteImgThread::Execute() ...
- 【struts2】struts2中的流接收与流发送
[前言]在我们的struts2后端中,实现流的接收和发送.就能够实现向server传视频流以及下载图片. [流接收] 如今举一个传公钥的样例.struts2用一个action接收Key,而Key就是用 ...
- 集群节点Elasticsearch升级
集群节点Elasticsearch升级 操作流程 1.首先执行Elasticsearch-1.2.2集群的索引数据备份 2.关闭elasticsearch-1.2.2集群的recovery.compr ...
- zzulioj--1711--漂洋过海来看你(dfs+vector)
1711: 漂洋过海来看你 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 89 Solved: 33 SubmitStatusWeb Board D ...
- 移动端1px细线问题
1可以用伪类实现 .con{position: relative;.con:before { content: " "; position: absolute; left: 0; ...