[Luogu] Mayan游戏
https://www.luogu.org/problemnew/show/P1312
太恶心了
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <iostream> using namespace std;
const int N = ; struct Node{int x, y, ho;} answer[N];
int n;
int a[N][N]; inline int read() {
int x = ; char c = getchar();
while(c < '' || c > '')c = getchar();
while(c >= '' && c <= '')x = x * + c - '', c = getchar();
return x;
} void drop() {
int num[N][N];
memset(num, -, sizeof(num));
for(int i = ; i < ; i ++) {
int h = ;
for(int j = ; j < ; j ++) if(a[i][j]) num[i][h ++] = j;
}
for(int i = ; i < ; i ++)
for(int j = ; j < ; j ++)
a[i][j] = num[i][j] == - ? : a[i][num[i][j]];
return ;
} bool empty() {
for(int i = ; i < ; i ++) for(int j = ; j < ; j ++) if(a[i][j]) return ;
return ;
} bool clear() {
bool ret_flag = ;
for(int i = ; i < ; i ++)
for(int j = ; j < ; j ++)
if(a[i][j]) {
int x = i;
while(x < && a[i][j] == a[x + ][j]) x ++;
if(x - i >= ) {
for(int xx = i; xx <= x; xx ++) {
int up = j; int dn = j;
while(a[xx][up + ] == a[i][j] && up < ) up ++;
while(a[xx][dn - ] == a[i][j] && dn > ) dn --;
if(up - dn >= )
for(int y_ = dn; y_ <= up; y_ ++) a[xx][y_] = ;
}
for(int x_ = i; x_ <= x; x_ ++) a[x_][j] = ;
ret_flag = ;
}
}
for(int i = ; i < ; i ++)
for(int j = ; j < ; j ++)
if(a[i][j]) {
int y = j;
while(a[i][y + ] == a[i][j] && y < ) y ++;
if(y - j >= ) {
for(int yy = j; yy <= y; yy ++) {
int lef = i; int rig = i;
while(a[lef - ][yy] == a[i][j] && lef > ) lef --;
while(a[rig + ][yy] == a[i][j] && rig < ) rig ++;
if(rig - lef >= )
for(int x_ = lef; x_ <= rig; x_ ++) a[x_][yy] = ;
}
for(int y_ = j; y_ <= y; y_ ++) a[i][y_] = ;
ret_flag = ;
}
}
if(ret_flag) return ;
else return ;
} void dfs(int tot) {
if(tot > n) {
if(empty()) {
for(int i = ; i <= n; i ++) {
if(answer[i].ho) printf("%d %d %d\n", answer[i].x + , answer[i].y, -);
else printf("%d %d %d\n", answer[i].x, answer[i].y, );
}
exit();
}
return ;
}
int sum[N + ];
memset(sum, , sizeof(sum));
for(int i = ; i < ; i ++) for(int j = ; j < ; j ++) sum[a[i][j]] ++;
for(int i = ; i <= ; i ++) if(sum[i] && sum[i] <= ) return ;
for(int i = ; i < ; i ++)
for(int j = ; j < ; j ++)
if(a[i][j] != a[i + ][j]) {
answer[tot].x = i; answer[tot].y = j; answer[tot].ho = (!a[i][j]);
int tmp[N][N];
memcpy(tmp, a, sizeof(tmp));
swap(a[i][j], a[i + ][j]);
drop();
while(clear()) drop();
dfs(tot + );
answer[tot].x = ; answer[tot].y = ; answer[tot].ho = ;
memcpy(a, tmp, sizeof(a));
}
} int main() {
n = read();
for(int i = ; i < ; i ++) {
for(int j = ; ; j ++) {
a[i][j] = read();
if(!a[i][j]) break;
}
}
dfs();
printf("-1\n");
return ;
}
/*
3
1 0
2 1 0
2 3 4 0
3 1 0
2 4 3 4 0
*/
[Luogu] Mayan游戏的更多相关文章
- [Luogu 1312] noip11 Mayan游戏
[Luogu 1312] noip11 Mayan游戏 Problem: Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...
- [题目] Luogu P1312 Mayan游戏
题面 题目描述 $ Mayan puzzle $是最近流行起来的一个游戏.游戏界面是一个 \(7行 \times 5列\)的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放 ...
- 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列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.**游戏通关 ...
- $Mayan$游戏
\(Mayan\)游戏 好啊,一年(半年)来的梦魇,终于结束了. 其实我从来没料到整体竟然会如此暴力--做的时候机房里冷得很,感觉晕晕乎乎地做完了,晕晕乎乎地调了好久,晕晕乎乎地听(看了题解的)\(q ...
- 洛谷P1312 Mayan游戏
P1312 Mayan游戏 题目描述 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 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
随机推荐
- 内存溢出,内存泄漏,CPU溢出区别
内存溢出 out of memory,就是你要的内存空间超过了系统实际分配给你的空间,此时系统相当于没法满足你的需求,就会报内存溢出的错误 内存泄漏是指你向系统申请分配内存进行使用(new),可是使用 ...
- python--基本语法与变量
python基本语法与变量 python语句的缩进 Python代码块使用缩进对齐表示代码逻辑,Python每段代码块缩进的空白数量可以任意,但要确保同段代码块语句必须包含相同的缩进空白数量.建议在代 ...
- linux tcp listen函数的参数backlog
1 listen函数(http://man7.org/linux/man-pages/man2/listen.2.html) int listen(int sockfd, int backlog); ...
- Date及DateFormat用法
Date 与DateFormat之间的转化String <————>Date Date与Calendar 之间的转化Long<————>Date 日历小程序 Scanner i ...
- C++反汇编第一讲,不同作用域下的构造和析构的识别
目录大纲: 1.全局(静态)对象的识别,(全局静态全局一样的,都是编译期间检查,所以当做全局对象看即可.) 1.1 探究本质,理解构造和析构的生成,以及调用方式(重要,如果不想知道,可以看总结.) 2 ...
- Spring Boot 获取Bean对象实体
一.实现 ApplicationContextAware 接口 package com.zxguan; import org.springframework.beans.BeansException; ...
- Windows编程 鼠标
客户区鼠标消息 由上一回我们得知Windows只把键盘消息发送给拥有输入焦点的窗口,而鼠标消息与此不同:只要鼠标跨越窗口或者在某窗口下按下鼠标键,那么窗口过程就会收到鼠标消息,不管该窗口是否活动或者是 ...
- Sql语句知识大全
1.经典SQL语句大全(绝对的经典) 2. 3. 4.一.基础 1.1.说明:创建数据库 2.CREATE DATABASE database-name 3.2.说明:删除数据库 4.drop dat ...
- PS笔记
PS 笔记 PS调色人像步骤-by李涛: 色阶- 追饱和度- 色彩平衡- 中间调不动,阴影偏青,偏绿,偏蓝 , 高光偏红,偏一点蓝 锐化 1. 冷暖对比-by狼族摄影: 高光和阴影设置为偏青色 ...
- $.proxy的使用
$.proxy()是jquery的一个方法.是一个改变this指向的方法. 在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: //正常的this使用 ...