luoguP1312 Mayan游戏 题目

#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)的更多相关文章

  1. [NOIP2011]Mayan游戏 题解

    题目大意: 有一个5*7的方格,上面有几种颜色的方块,如果在一横行或者竖列上有连续三个或者三个以上相同颜色的方块,则它们将立即被消除,方块消除之后,消除位置之上的方块将掉落.每步移动可以且仅可以沿横向 ...

  2. 刷题总结——mayan游戏(NOIP2011提高组day2T3)

    题目: 题目背景 NOIP2011提高组 DAY1 试题. 题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

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

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

  4. NOIP2011 Mayan游戏

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

  5. $Mayan$游戏

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

  6. 洛谷P1312 Mayan游戏

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

  7. Luogu P1312 Mayan游戏(搜索)

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

  8. noip提高组2011 Mayan游戏

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

  9. [题目] Luogu P1312 Mayan游戏

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

随机推荐

  1. vuex 使用实例

    官网:https://vuex.vuejs.org/zh/guide/state.html Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 1.vuex解决了组件之间同一状态的共享问题 ...

  2. 了解Greenplum(1)

    了解系列废话: 数据管理系统实现,以Greenplum作为课后实验,这里将实验报告贴出来,纯粹灌水. 1.Greenplum架构 如上图所示,GP的基本结构是单master,多slave节点,客户端连 ...

  3. 使用C#解析XMIND文件格式

    static void Main(string[] args) { var tempPath = @"c:\Temp"; if (Directory.Exists(tempPath ...

  4. 06Web服务

    1.web开发入门 1.1 引入 软件结构分类: CS结构:客户端和服务器端 特点: 1)必须安装特点的客户端程序 2)服务器端升级,客户端同步升级 BS结构:浏览器和服务器端 特点: 1)不需要安装 ...

  5. this与super的区别

    调用super()的语句必须要写在子类构造方法的第一行. super()是在子类中调用父类的构造方法:this()是在同一类中调用其它方法. super()和this()都需要放在构造函数的第一行. ...

  6. java并发学习--第三章 线程安全问题

    线程的安全问题一直是我们在开发过程中重要关注的地方,出现线程安全问题的必须满足两个条件:存在着两个或者两个以上的线程:多个线程共享着共同的一个资源, 而且操作资源的代码有多句.接下来我们来根据JDK自 ...

  7. 将ubuntu系统迁移到ssd固态

    朋友送了一个固态硬盘给我,因此将原机械硬盘上的系统迁移到固态硬盘上. 原机械硬盘(dev/sdb)装有win10和ubuntu双系统.分区情况如下: sda1:ESP分区 sda2:资料 sda3:资 ...

  8. 如何搭建一个spring boot项目

    什么是springboot? Spring Boot俗称微服务.Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特 ...

  9. 19 如何在String和Byte[]对象之间进行转换?

  10. iOS10以上App请求用户授权系统设置权限

    <key>NSAppleMusicUsageDescription</key> <string>使用媒体资源</string> <key>N ...