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

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. win10+vs2017+asp.net MVC5+EF6+mysql 闪退问题,解决方法

    1.安装 mysql-for-visualstudio-2.0.5.msi 2.安装 mysql-connector-net-6.10.7.msi 3.在VS2017 右键选中项目,管理NuGet程序 ...

  2. 以使用QSqlQuery向数据库中插入数据为例,做一个小结

    背景: 最近在使用Qt+SQLite写一个本地数据库管理程序(使用者不懂SQL),在写向数据库中插入数据的 相关的函数时,我遇到了几个问题(暂时就这些): 1.向指定字段插入指定数据时,读取到的数据都 ...

  3. linux脚本实现自己主动输入password

    使用Linux的程序猿对输入password这个举动一定不陌生,在Linux下对用户有严格的权限限制,干非常多事情越过了权限就得输入password.比方使用超级用户运行命令,又比方ftp.ssh连接 ...

  4. java nio读取和写入文件

    读取 package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS ...

  5. Linux 进程状态 说明

    Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态.  在下文将对进程的 R.S.D.T.Z.X 六种状态做个说明. 进程状态: S ...

  6. 自动化测试,基于selenium/appnium 学习

    1. 搭建环境,配置java,安装tomcat 7.0,运行eclipse

  7. COGS1532. [IOI2001]移动电话

    1532. [IOI2001]移动电话 ★☆   输入文件:mobilephones.in   输出文件:mobilephones.out   简单对比时间限制:5 s   内存限制:256 MB [ ...

  8. 开发环境部署git 步骤

    1.安装完后,打开git bash.  vim .gitconfig 此文件放在用户目录,即 git bash 打开后默认位置. 2.插入以下内容,保存 [user] name = email = [ ...

  9. 使用jdk中keytool生成证书

    -genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥.私钥和证书 -alias 产生别名 -keystor ...

  10. 九度OJ 1060:完数VS盈数 (数字特性)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5590 解决:2093 题目描述: 一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1.则称其为"完数" ...