BZOJ4088: [Sdoi2015]立体图
高一联赛之后不久写的。当时看到这题就感觉特别优美。那个时候啥都不会,就只会这种模拟题,还只会最暴力的方法。对于每个方向的灯,枚举每个位置,手动枚举所有遮挡效果,并在枚举位置过程中传递遮挡效果。
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]立体图的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab slice方法和包络法绘制三维立体图
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- [BZOJ3991][SDOI2015]寻宝游戏
[BZOJ3991][SDOI2015]寻宝游戏 试题描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择 ...
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...
- 【BZOJ】【3991】【SDOI2015】寻宝游戏
dfs序 我哭啊……这题在考试的时候(我不是山东的,CH大法吼)没想出来……只写了50分的暴力QAQ 而且苦逼的写的比正解还长……我骗点分容易吗QAQ 骗分做法: 1.$n,m\leq 1000$: ...
- Vijos P1497 立体图【模拟】
立体图 描述 小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容.最近,他准备给小朋友讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子, ...
- BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]
3993: [SDOI2015]星际战争 题意:略 R1D2T1考了裸二分答案+二分图最大匹配... #include <iostream> #include <cstdio> ...
- BZOJ 3990: [SDOI2015]排序 [搜索]
3990: [SDOI2015]排序 题意:\(2^n\)的一个排列,给你n种操作,第i种把每\(2^{i-1}\)个数看成一段,交换任意两段.问是这个序列有序的操作方案数,两个操作序列不同,当且仅当 ...
随机推荐
- 黑帽SEO手法
黑帽SEO手法 0x00:概念 SEO全称搜索引擎优化,通过站内优化和站内优化方式来提升搜索引擎排名,有白帽SEO和黑帽SEO. 因为正规的SEO优化需要很长时间,黑帽SEO手法让站内快速提升排名的有 ...
- hdu 2063过山车
二分匹配 #include<iostream> #include<cstring> using namespace std; int k,m,n; int rem[500+5] ...
- 30天自制操作系统(二)汇编语言学习与Makefile入门
1 介绍文本编辑器 这部分可直接略过 2 继续开发 helloos.nas中核心程序之前的内容和启动区以外的内容先不讲了,因为还涉及到一些软盘方面的知识. 然后来讲的是helloos.nas这个文件 ...
- Maven的安装以及在IDEA中的配置
Maven的安装 之前的一篇博客中已经写到过了Maven的安装.这里就只给出链接了. http://www.cnblogs.com/tuhooo/p/5905569.html 版本虽然不同,但是安装的 ...
- MySQL 原理性
1.MySQL的复制原理以及流程 (1).复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 2. 从:io线程——在使用start ...
- JavaWeb学习总结第二篇--第一个JavaWeb程序
JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下 ...
- Hive总结(四)hive安装记录
本篇为安装篇较简单: 前提: 1: 安装了hadoop-1.0.4(1.0.3也能够)正常执行 2:安装了hbase-0.94.3, 正常执行 接下来,安装Hive,基于已经安装好的hadoop.过程 ...
- Android 超高仿微信图片选择器 图片该这么载入
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:[张鸿洋的博客] 1.概述 关于手机图片载入器,在当今像 ...
- Python中urllib2总结
使用Python访问网页主要有三种方式: urllib, urllib2, httpliburllib比较简单,功能相对也比较弱,httplib简单强大,但好像不支持session1. 最简单的页面访 ...
- 之前博客中的代码都放到github上
之前一直把代码托管在taocode上,现在已经不能用了,所以把代码整理了一下,统一都放在gibhub上了. LALR(1)语法分析生成器:https://github.com/kiven-li/xby ...