luoguP1312 Mayan游戏 题解(NOIP2011)
#include<bits/stdc++.h>
#define ll long long
#define rg register
#define il inline
#define inf 1<<30;
using namespace std; int a[][],b[][][];
int tmp[][];
int way[][];
int n,ans,maxn; il ll gi()
{
ll x=,o=;
char ch;ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') o=-,ch=getchar();
while(ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x*o;
}
il void input()
{
n=gi();
for(int i=;i<=;i++)
{
int tmp=gi(),p=;
while(tmp)
a[p--][i]=tmp,tmp=gi();
a[][i]=;
}
}
il void print(int a[][])
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
cout<<a[i][j];
cout<<endl;
}
}
il void drop(int y)
{
int p=;
for(int i=;i>=;i--)
{
if(a[i][y]!=)
{
p=i+;
while(a[p][y]==)
p++;
if(p==i+) continue;
p-=;
a[p][y]=a[i][y];
a[i][y]=;
}
}
}
il int del(int i,int j,int deti,int detj)
{
int fi=i,fj=j,s=;
while()
{
i+=deti;j+=detj;
if(i==||i==||j==||j==) break;
if(tmp[i][j]!=tmp[fi][fj]) break;
s++;
if(s==) break;
}
i=fi;j=fj;
while()
{
i-=deti;j-=detj;
if(i==||i==||j==||j==) break;
if(tmp[i][j]!=tmp[fi][fj]) break;
s++;
if(s==) break;
}
if(s>=)
{
a[fi][fj]=;
return ;
}
return ;
}
il int delet()
{
int flag=;
for(int i=;i>=;i--)
for(int j=;j<=;j++)
tmp[i][j]=a[i][j];
for(int i=;i>=;i--)
for(int j=;j<=;j++)
{
if(a[i][j]==) continue;
if(del(i,j,,)) flag=;
if(del(i,j,,)) flag=;
}
for(int i=;i<=;i++)drop(i);
return flag;
}
il void move(int x,int y,int mode)
{
swap(a[x][y],a[x][y+mode]);
drop(y);
drop(y+mode);
while(delet());
}
il bool check(int b[][])
{
for(int i=;i>=;i--)
for(int j=;j<=;j++)
{
if(a[i][j]!=)
return ;
}
return ;
}
il void reset(int k)
{
for(int l=;l<=;l++)
for(int r=;r<=;r++)
a[l][r]=b[k][l][r];
}
il void copy(int k)
{
for(int l=;l<=;l++)
for(int r=;r<=;r++)
b[k+][l][r]=a[l][r];
}
il void dfs(int k)
{
if(k>n)
{
if(check(b[k]))
{
ans=;
for(int i=;i<k;i++)
{
for(int j=;j<=;j++)
cout<<way[i][j]<<' ';
cout<<endl;
}
}
return;
}
if(ans) return;
for(int j=;j<=;j++)
{
for(int i=;i>=;i--)
{
reset(k);
if(a[i][j]==) continue;
if(j!=&&a[i][j+]!=a[i][j])
{
way[k][]=j-;
way[k][]=-i;
way[k][]=;
move(i,j,);
copy(k);
dfs(k+);
}
if(ans) return;
reset(k);
if(j!=&&a[i][j-]==)
{
way[k][]=j-;
way[k][]=-i;
way[k][]=-;
move(i,j,-);
copy(k);
dfs(k+);
}
if(ans) return;
}
}
} int main()
{
input();
for(int i=;i<=;i++)
for(int j=;j<=;j++)
b[][i][j]=a[i][j];
dfs();
if(!ans) cout<<"-1"<<endl;
return ;
}
luoguP1312 Mayan游戏 题解(NOIP2011)的更多相关文章
- [NOIP2011]Mayan游戏 题解
题目大意: 有一个5*7的方格,上面有几种颜色的方块,如果在一横行或者竖列上有连续三个或者三个以上相同颜色的方块,则它们将立即被消除,方块消除之后,消除位置之上的方块将掉落.每步移动可以且仅可以沿横向 ...
- 刷题总结——mayan游戏(NOIP2011提高组day2T3)
题目: 题目背景 NOIP2011提高组 DAY1 试题. 题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...
- 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
- NOIP2011 Mayan游戏
3 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上 ...
- $Mayan$游戏
\(Mayan\)游戏 好啊,一年(半年)来的梦魇,终于结束了. 其实我从来没料到整体竟然会如此暴力--做的时候机房里冷得很,感觉晕晕乎乎地做完了,晕晕乎乎地调了好久,晕晕乎乎地听(看了题解的)\(q ...
- 洛谷P1312 Mayan游戏
P1312 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他 ...
- Luogu P1312 Mayan游戏(搜索)
P1312 Mayan游戏 题意 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个\(7\)行\(\times 5\)列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必 ...
- noip提高组2011 Mayan游戏
Mayan游戏 描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.**游戏通关 ...
- [题目] Luogu P1312 Mayan游戏
题面 题目描述 $ Mayan puzzle $是最近流行起来的一个游戏.游戏界面是一个 \(7行 \times 5列\)的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放 ...
随机推荐
- 330-基于FMC接口的Kintex-7 XC7K325T PCIeX8 3U PXIe接口卡 光纤PCIe卡
一.板卡概述 本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8.64bit D ...
- rabbit localhost不能登录
解决方案 将C:\Users\{用户名}\.erlang.cookie 复制到 C:\Windows\System32\config\systemprofile 目录. 重启rabbitMQ服务 [转 ...
- onupdate
数据的初始化显示刚开始写在onupdate中,文档类中的数据更新之后,希望通过调用UpdateAllViews(FALSE)来实现视图的更新,可以实现!后来觉得不妥,想把初始化显示写在ondraw中, ...
- 阿里云ECS VSFTP上传本地文件
开始终端 购买云服务,获得公网IP,内网IP 控制台首页获得 获得终端连接密码 连接终端,输入连接密码 获得终端界面,进入终端 上传文件 ## .安装VSFTP服务器程序 yum install vs ...
- WiFi密码新攻击破解方法,黑客攻破只需10秒
近日,中国知名黑客安全组织东方联盟研究人员透露了一种新的WiFi黑客技术,使黑客更容易破解大多数现代路由器的WiFi密码,并且攻破只需要10秒,速度非常快. 方法是利用由流行的密码破解工具Hashca ...
- re模块的高级使用
主要有四个方法: search : 从字符串的任意位置开始检索,首次匹配即结束 findall : 全部匹配 sub : 将正则匹配结果进行替换 split : 根据正则匹配结果将字符串进行切分,然后 ...
- NIO之FileChannel操作示例
1. 写文件操作 /** * 写文件 */ public class FileChannelTest { public static void main(String[] args) throws I ...
- ht-4 hashmap特性
一.hashmap底层原理: hashmap调用默认构造方法会产生一个默认底层是长度为16的Entry数组,首先调用key的hasCode()方法来得到一个整数, int hash = hash(ke ...
- HTML计算机代码元素
计算机代码 1 2 3 4 5 6 var person = { firstName:"Bill", lastName:"Gates", ...
- C#[WinForm]实现自动更新
C#[WinForm]实现自动更新 winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个 ...