高一联赛之后不久写的。当时看到这题就感觉特别优美。那个时候啥都不会,就只会这种模拟题,还只会最暴力的方法。对于每个方向的灯,枚举每个位置,手动枚举所有遮挡效果,并在枚举位置过程中传递遮挡效果。

const char* graph[]={
" +-------+",
" /5\\7777\'/|",
" /55.*\'88/9|",
" /.6666\\8/9/|",
"+-------+9.0|",
"|\\44444/|\\:0|",
"|1\\444/3|b*0|",
"|11\\4/33|b:\\|",
"|111X333|b\'a+",
"|11/2\\33|/a/ ",
"|1/222\\3|a/ ",
"|/22222\\|/ ",
"+-------+ "
};
enum{RED=1,GREEN=2,BLUE=4};
const char* colors="KRGYBPCW";
typedef int cube[12];
cube v[102][102][102];
int h[102][102];
int g[102][102];
char f(cube& a,int x,int y){
int u=graph[x][y];
return u<48||u>57&&u<97||u>98?u:colors[a[u-48-(u>'9')*39]];
}
char s[1201][1202];
int n,m;
void cover(cube& a,int x,int y){
for(int i=0;i!=12;++i)
while(a[i]>>3)
a[i]=a[i]&7|a[i]>>3;
for(int i=0;i!=13;++i)
for(int j=0;j!=13;++j)
if(f(a,12-i,j)!=' ')
s[x+i][y+j]=f(a,12-i,j);
}
#include<cstring>
#include<cstdio>
#include<algorithm>
using std::max;
#define FOR(x,y,z,f)\
for(int x=1;x<=m;++x)\
for(int y=1;y<=n;++y)\
for(int z=1;z<=f[x][y];++z)
void print(){
memset(s,' ',sizeof s);
FOR(x,y,z,h)
cover(v[x][y][z],(m-x)*4+(z-1)*8,(m-x)*4+(y-1)*8);
for(int i=sizeof s/sizeof *s-1;~i;--i)
for(int j=sizeof *s-1;j&&s[i][j]==' ';--j)
if(s[i][j-1]!=' '){
s[i][j]=0;
puts(s[i]);
}
}
#define shade(x,y,z,i) v[x][y][z][i]|=u
int main(){
scanf("%d%d",&m,&n);
for(int x=1;x<=m;++x)
for(int y=1;y<=n;++y)
scanf("%d",h[x]+y);
char t[10];
for(int i=0;i!=3;++i)
scanf("%s",t+i*3);
for(int k=0;k!=9;++k){
if(t[k]=='*')
continue;
int u=(t[k]=='R'?RED:t[k]=='G'?GREEN:BLUE)<<k*3;
if(k==0){
memcpy(g,h,sizeof g);
for(int x=2;x<=m;++x)
for(int y=2;y<=n;++y)
g[x][y]=max(g[x][y],g[x-1][y-1]-1);
FOR(x,y,z,g){
shade(x,y,z-1,5);
shade(x,y,z-1,6);
shade(x,y,z-1,7);
shade(x,y,z-1,8);
shade(x+1,y+1,z-1,5);
shade(x+1,y+1,z-1,6);
shade(x+1,y+1,z-1,7);
shade(x+1,y+1,z-1,8);
shade(x,y+1,z-1,5);
shade(x,y+1,z-1,6);
shade(x+1,y,z-1,7);
shade(x+1,y,z-1,8);
}
FOR(x,y,z,h)
for(int i=5;i<=8;++i)
v[x][y][z][i]^=u;
}
if(k==1){
memcpy(g,h,sizeof g);
for(int x=2;x<=m;++x)
for(int y=1;y<=n;++y)
g[x][y]=max(g[x][y],g[x-1][y]-1);
FOR(x,y,z,g){
shade(x,y,z-1,5);
shade(x,y,z-1,6);
shade(x,y,z-1,7);
shade(x,y,z-1,8);
shade(x+1,y,z-1,5);
shade(x+1,y,z-1,6);
shade(x+1,y,z-1,7);
shade(x+1,y,z-1,8);
}
FOR(x,y,z,h)
for(int i=5;i<=8;++i)
v[x][y][z][i]^=u;
}
if(k==2){
memcpy(g,h,sizeof g);
for(int x=2;x<=m;++x)
for(int y=n-1;y;--y)
g[x][y]=max(g[x][y],g[x-1][y+1]-1);
FOR(x,y,z,g){
shade(x+1,y-1,z,0);
shade(x+1,y-1,z,10);
shade(x,y-1,z,9);
shade(x,y-1,z,0);
shade(x,y-1,z,10);
shade(x,y-1,z,11);
shade(x,y,z-1,5);
shade(x,y,z-1,6);
shade(x,y,z-1,7);
shade(x,y,z-1,8);
shade(x+1,y-1,z-1,5);
shade(x+1,y-1,z-1,6);
shade(x+1,y-1,z-1,7);
shade(x+1,y-1,z-1,8);
shade(x+1,y-1,z-1,9);
shade(x+1,y-1,z-1,0);
shade(x+1,y-1,z-1,10);
shade(x+1,y-1,z-1,11);
shade(x+1,y,z-1,5);
shade(x+1,y,z-1,7);
shade(x,y-1,z-1,6);
shade(x,y-1,z-1,8);
shade(x,y-1,z-1,9);
shade(x,y-1,z-1,0);
shade(x,y-1,z-1,10);
shade(x,y-1,z-1,11);
}
FOR(x,y,z,h){
for(int i=5;i!=12;++i)
v[x][y][z][i]^=u;
v[x][y][z][0]^=u;
}
}
if(k==3){
memcpy(g,h,sizeof g);
for(int x=1;x<=m;++x)
for(int y=2;y<=n;++y)
g[x][y]=max(g[x][y],g[x][y-1]-1);
FOR(x,y,z,g){
shade(x,y,z-1,5);
shade(x,y,z-1,6);
shade(x,y,z-1,7);
shade(x,y,z-1,8);
shade(x,y+1,z-1,5);
shade(x,y+1,z-1,6);
shade(x,y+1,z-1,7);
shade(x,y+1,z-1,8);
}
FOR(x,y,z,h)
for(int i=5;i<=8;++i)
v[x][y][z][i]^=u;
}
if(k==4){
for(int x=1;x<=m;++x)
for(int y=1;y<=n;++y)
for(int i=5;i<=8;++i)
shade(x,y,h[x][y],i);
}
if(k==5){
memcpy(g,h,sizeof g);
for(int x=1;x<=m;++x)
for(int y=n-1;y;--y)
g[x][y]=max(g[x][y],g[x][y+1]-1);
FOR(x,y,z,g){
shade(x,y-1,z,9);
shade(x,y-1,z,0);
shade(x,y-1,z,10);
shade(x,y-1,z,11);
shade(x,y,z-1,5);
shade(x,y,z-1,6);
shade(x,y,z-1,7);
shade(x,y,z-1,8);
shade(x,y-1,z-1,5);
shade(x,y-1,z-1,6);
shade(x,y-1,z-1,7);
shade(x,y-1,z-1,8);
shade(x,y-1,z-1,9);
shade(x,y-1,z-1,0);
shade(x,y-1,z-1,10);
shade(x,y-1,z-1,11);
}
FOR(x,y,z,h){
for(int i=5;i!=12;++i)
v[x][y][z][i]^=u;
v[x][y][z][0]^=u;
}
}
if(k==6){
memcpy(g,h,sizeof g);
for(int x=m-1;x;--x)
for(int y=2;y<=n;++y)
g[x][y]=max(g[x][y],g[x+1][y-1]-1);
FOR(x,y,z,g){
shade(x-1,y+1,z,1);
shade(x-1,y+1,z,2);
shade(x-1,y,z,1);
shade(x-1,y,z,2);
shade(x-1,y,z,3);
shade(x-1,y,z,4);
shade(x,y,z-1,5);
shade(x,y,z-1,6);
shade(x,y,z-1,7);
shade(x,y,z-1,8);
shade(x-1,y+1,z-1,1);
shade(x-1,y+1,z-1,2);
shade(x-1,y+1,z-1,3);
shade(x-1,y+1,z-1,4);
shade(x-1,y+1,z-1,5);
shade(x-1,y+1,z-1,6);
shade(x-1,y+1,z-1,7);
shade(x-1,y+1,z-1,8);
shade(x-1,y,z-1,1);
shade(x-1,y,z-1,2);
shade(x-1,y,z-1,3);
shade(x-1,y,z-1,4);
shade(x-1,y,z-1,6);
shade(x-1,y,z-1,8);
shade(x,y+1,z-1,5);
shade(x,y+1,z-1,7);
}
FOR(x,y,z,h)
for(int i=1;i<=8;++i)
v[x][y][z][i]^=u;
}
if(k==7){
memcpy(g,h,sizeof g);
for(int x=m-1;x;--x)
for(int y=n;y;--y)
g[x][y]=max(g[x][y],g[x+1][y]-1);
FOR(x,y,z,g){
shade(x-1,y,z,1);
shade(x-1,y,z,2);
shade(x-1,y,z,3);
shade(x-1,y,z,4);
shade(x,y,z-1,5);
shade(x,y,z-1,6);
shade(x,y,z-1,7);
shade(x,y,z-1,8);
shade(x-1,y,z-1,1);
shade(x-1,y,z-1,2);
shade(x-1,y,z-1,3);
shade(x-1,y,z-1,4);
shade(x-1,y,z-1,5);
shade(x-1,y,z-1,6);
shade(x-1,y,z-1,7);
shade(x-1,y,z-1,8);
}
FOR(x,y,z,h)
for(int i=1;i<=8;++i)
v[x][y][z][i]^=u;
}
if(k==8){
memcpy(g,h,sizeof g);
for(int x=m-1;x;--x)
for(int y=n-1;y;--y)
g[x][y]=max(g[x][y],g[x+1][y+1]-1);
FOR(x,y,z,g){
shade(x-1,y-1,z,2);
shade(x-1,y-1,z,3);
shade(x-1,y-1,z,10);
shade(x-1,y-1,z,11);
shade(x-1,y,z,1);
shade(x-1,y,z,2);
shade(x-1,y,z,3);
shade(x-1,y,z,4);
shade(x,y-1,z,9);
shade(x,y-1,z,0);
shade(x,y-1,z,10);
shade(x,y-1,z,11);
shade(x,y,z-1,5);
shade(x,y,z-1,6);
shade(x,y,z-1,7);
shade(x,y,z-1,8);
shade(x-1,y-1,z-1,1);
shade(x-1,y-1,z-1,2);
shade(x-1,y-1,z-1,3);
shade(x-1,y-1,z-1,4);
shade(x-1,y-1,z-1,5);
shade(x-1,y-1,z-1,6);
shade(x-1,y-1,z-1,7);
shade(x-1,y-1,z-1,8);
shade(x-1,y-1,z-1,9);
shade(x-1,y-1,z-1,0);
shade(x-1,y-1,z-1,10);
shade(x-1,y-1,z-1,11);
shade(x-1,y,z-1,1);
shade(x-1,y,z-1,2);
shade(x-1,y,z-1,3);
shade(x-1,y,z-1,4);
shade(x-1,y,z-1,5);
shade(x-1,y,z-1,6);
shade(x,y-1,z-1,7);
shade(x,y-1,z-1,8);
shade(x,y-1,z-1,9);
shade(x,y-1,z-1,0);
shade(x,y-1,z-1,10);
shade(x,y-1,z-1,11);
}
FOR(x,y,z,h)
for(int i=0;i!=12;++i)
v[x][y][z][i]^=u;
}
}
print();
}

BZOJ4088: [Sdoi2015]立体图的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  3. Matlab slice方法和包络法绘制三维立体图

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  4. [BZOJ3991][SDOI2015]寻宝游戏

    [BZOJ3991][SDOI2015]寻宝游戏 试题描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择 ...

  5. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)

    题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...

  6. 【BZOJ】【3991】【SDOI2015】寻宝游戏

    dfs序 我哭啊……这题在考试的时候(我不是山东的,CH大法吼)没想出来……只写了50分的暴力QAQ 而且苦逼的写的比正解还长……我骗点分容易吗QAQ 骗分做法: 1.$n,m\leq 1000$: ...

  7. Vijos P1497 立体图【模拟】

    立体图 描述 小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容.最近,他准备给小朋友讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子, ...

  8. BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]

    3993: [SDOI2015]星际战争 题意:略 R1D2T1考了裸二分答案+二分图最大匹配... #include <iostream> #include <cstdio> ...

  9. BZOJ 3990: [SDOI2015]排序 [搜索]

    3990: [SDOI2015]排序 题意:\(2^n\)的一个排列,给你n种操作,第i种把每\(2^{i-1}\)个数看成一段,交换任意两段.问是这个序列有序的操作方案数,两个操作序列不同,当且仅当 ...

随机推荐

  1. Redis(九):使用RedisTemplate访问Redis数据结构API大全

    RedisTemplate介绍 spring封装了RedisTemplate对象来进行对redis的各种操作,它支持所有的 redis 原生的api. RedisTemplate在spring代码中的 ...

  2. dede频道标签channel和频道内容标签channelartlist的调用栏目名的不同方式,如果错误使用标签会发生错误

    频道标签 [field:typename/] 频道内容标签 {dede:field name='typename'/}

  3. Django之站内搜索-Solr,Haystack

    java -version 不多说 solr 是java 开发的 java version "1.7.0_79" Java(TM) SE Runtime Environment ( ...

  4. eclipse-jee版配置tomcat

    Eclipse作为一款优秀的java开发开源IDE,集成了许多优秀的开发控件.下来我就如何安装eclipse及插件进行说明: 一.JDK安装   JDK是作为整个java的核心,包括运行环境,编译工具 ...

  5. beego的MVC架构介绍

    beego 的 MVC 架构介绍 beego 是一个典型的 MVC 框架,它的整个执行逻辑如下图所示: 通过文字来描述如下: 在监听的端口接收数据,默认监听在 8080 端口. 用户请求到达 8080 ...

  6. typeof 与 instanceof 区别

    typeof typeof 是一元运算符,返回值是字符串,且只能是number,string,boolean,object,function,undefined typeof用来判断一个值是否存在 i ...

  7. Swift实战(一): 剪子包袱锤ios应用

    来自十奶的大作业教学视频. http://www.swiftv.cn/course/ic2tqzob 主要了解了MVC模型. 首先是View,通过设计mainstoryboard构建UI界面,主要靠拖 ...

  8. 微信小程序页面之间的跳转

    一.使用标签跳转             index.wxml:             在index.wxml页面添加一个<navigator>元素,在元素里面使用属性url就可以 二. ...

  9. EasyNVR NVR网页无插件直播在兼容宇视NVR RTSP流媒体时PLAY过程对Scale的兼容

    前一段在维护EasyNVR客户的过程中遇到一个问题,在接入宇视NVR的时候,就是明明在vlc中能非常正常播放的视频流,却用EasyRTSPClient RTSP客户端拉流的协议交互过程中,PLAY命令 ...

  10. Ubuntu下如何配置使终端透明

    今天学习了一招如何将Ubuntu下的终端背景颜色变得透明,感觉透明之后有好处,比如网上有些命令,可以直接覆盖原来的网页察看,然后敲击命令. 下面就来看看终端背景变透明前后的对比效果. 完全不透明,最大 ...