终于把省选时的遗憾补上了…

对于构造立方体:

首先BFS构出底层,然后再逐层构造立方体

对于计算:

$O(n^6)$爆搜即可。

#include<cstdio>
#include<cstring>
const int N=75,M=343010;
char ch[N];
int n,m,i,j,k,tmp,q[M],t,l,r;
int cnt[M],side[M][6],g[M],loc[M][3],a[N][N][N],ap[N][N][N],ansl=~0U>>1,ansr,sum;
int dx[6]={1,-1,0,0,0,0},dy[6]={0,0,1,-1,0,0},dz[6]={0,0,0,0,1,-1};
bool vis[M];
inline void add(int x,int y,int z,int id){vis[q[++t]=a[x][y][z]=id]=1;loc[t][0]=x,loc[t][1]=y,loc[t][2]=z;}
inline int getup(int x){for(int i=0;i<cnt[x];i++)if(!vis[side[x][i]])return side[x][i];}
inline int getside(int x){for(int i=0;i<cnt[x];i++)if(!vis[side[x][i]]&&cnt[side[x][i]]<5)return side[x][i];}
inline int getcommon(int x,int y){for(int i=0;i<cnt[x];i++)if(!vis[side[x][i]])for(int j=0;j<cnt[y];j++)if(side[x][i]==side[y][j])return side[x][i];}
void dfs(int u,int d){
int x,y,z,i;
for(x=loc[u][0],y=loc[u][1],z=loc[u][2];x&&y&&z&&x<=n&&y<=n&&z<=n;x+=dx[d],y+=dy[d],z+=dz[d])if(!(ap[x][y][z]++))sum+=a[x][y][z];
if(u==t){if(ansl>sum)ansl=sum;if(ansr<sum)ansr=sum;}else for(i=0;i<6;i++)dfs(u+1,i);
for(x=loc[u][0],y=loc[u][1],z=loc[u][2];x&&y&&z&&x<=n&&y<=n&&z<=n;x+=dx[d],y+=dy[d],z+=dz[d])if(!(--ap[x][y][z]))sum-=a[x][y][z];
}
int main(){
scanf("%d",&n);m=n*n*n;
for(i=1;i<=m;i++){
scanf("%d",&g[i]),gets(ch+1),l=1,r=std::strlen(ch+1);
while(ch[l]==' ')l++;
while(ch[r]==' ')r--;ch[++r]=' ';
for(j=l;j<=r;j++)if(ch[j]>='0'&&ch[j]<='9')(side[i][cnt[i]]*=10)+=ch[j]-'0';else cnt[i]++;
if(cnt[i]==3)tmp=i;
}
add(1,1,1,tmp),add(2,1,1,side[tmp][0]),add(1,2,1,side[tmp][1]);
for(l=2,r=3;l<r;l=r+1,r=t){
if(loc[l][0]<n)add(loc[l][0]+1,1,1,getside(q[l]));
for(i=l;i<r;i++)add(loc[i][0],loc[i][1]+1,1,getcommon(q[i],q[i+1]));
if(loc[r][1]<n)add(1,loc[r][1]+1,1,getside(q[r]));
}
for(k=1;k<n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)add(i,j,k+1,getup(a[i][j][k]));
for(t=0,k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++){
a[i][j][k]=g[a[i][j][k]];
if(!a[i][j][k])loc[++t][0]=i,loc[t][1]=j,loc[t][2]=k;
}
for(i=0;i<6;i++)dfs(1,i);
return printf("%d %d",ansl,ansr),0;
}

  

BZOJ3619 : [Zjoi2014]璀灿光华的更多相关文章

  1. BZOJ3619 [Zjoi2014]璀灿光华 构造+dfs

    题意:有一个\(a^3\)个小正方体组成的大正方体,其中有n个正方体会向上下左右前后六个方向中的一个发出光,正方体是透光的,被照亮的正方体有个美丽值\(g_{i}\),给出正方体的相邻关系,问美丽值之 ...

  2. 题解:[ZJOI2014]璀灿光华

    原题链接 OJ 题号 洛谷 3342 loj 2203 bzoj 3619 题目描述 金先生有一个女朋友没名字.她勤劳勇敢.智慧善良.金先生很喜欢她.为此,金先生用\(a^3\)块\(1 \times ...

  3. 「ZJOI2014」璀灿光华

    「ZJOI2014」璀灿光华 实际上,可以不用建水晶立方体... 因为,发光水晶的方向都要枚举一遍. 只需知道发光水晶每个方向有哪些水晶就可以了. 对于一个发光水晶,将它连接的水晶标号. 从该水晶bf ...

  4. ZJOI2017 Day1

    私のZJOI Day1 2017-3-21 07:52:53 有人在暴力膜 苟-- 富贵 无相忘 ZJOI2017交流群 133135071 如果你足够厉害 如果你足够厉害 如果你足够厉害 其实完全可 ...

  5. bzoj AC倒序

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

  6. #知识#室内设计原理ing

    室内设计原理 第一章 室内设计的含义和基本观点 人的一生,绝大部分时间是在室内度过的,因此,人们设计创造的室内环境,必然会直接关系到室内生活.生产活动的质量,关系到人们的安全.健康.效率.舒适等等.室 ...

  7. 逐浪web无障碍与国际化以及全民族语言支持白皮书

    北京时间2019年5月10日,领先的门户网站与WEB内核服务厂商--上海Zoomla!逐浪CMS团队发布其年度重榜产品:逐浪CMS全民族语言与国际版,体验站点:http://demo2.z01.com ...

  8. [ZJOI3527][Zjoi2014]力

    [ZJOI3527][Zjoi2014]力 试题描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi.试求Ei. 输入 包含一个整数n,接下来n行每行输入一个数,第i行表示qi. 输出 有n ...

  9. bzoj3527: [Zjoi2014]力 fft

    bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...

随机推荐

  1. scrollview里面多张图片,每张都能放大缩小

    http://blog.sina.com.cn/s/blog_5d68044001018s1n.html scrollview里面多张图片,每张都能放大缩小 - (void)viewDidLoad{  ...

  2. C# 浅谈接口的优势

    总结了一下接口的小优势,可以便于新手理解为什么要用接口,用接口有什么好处. 1.接口的定义: 关键字:interface,接口名一般大写I开头,接口中定义方法,但是不实现方法 interface IB ...

  3. 一起做RGB-D SLAM (1)

    前言 2016.11 更新 增加了对16.04的支持. 整理了过时的代码. SLAM,即Simultaneous Localization and Mapping,中文译作同时定位与地图创建,是近几十 ...

  4. Linux prerouting和postrouting的区别

    我大概清楚一点就是从内网出去的时候用POSTROUTING进来的时候用PREROUTING,可是做透明代理的时候确是用PREROUTING.这是为什么呢? 回复: sunnygg pre还是post是 ...

  5. SHSEE 备战最后十(四)天日记

    努力. Day -1 看书.睡觉. Day 0 上午考试.语文纯RP题跪.理总不错. 下午上课,各种神. Day 1 上午下午讲课...Day 0成绩出来才#17.... Day 2 考试..这次题目 ...

  6. java前三本基础知识总结

    基础软件:1:JDK,JRE,JVM(一些参数和作用),GC(机制和算法),Class,Loader(机种作用,加载顺序) 2:环境搭建:JAVA_HOME,path,class 语言基础:引用类型: ...

  7. 面向侧面的程序设计AOP-------《三》.Net平台AOP技术概览

    本文转载自张逸:晴窗笔记 .Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上, ...

  8. OpenWRT

    如何查日志:http://blog.appdevp.com/archives/382 logread OpenWrt下创建crontab任务: 确保/etc/crontab/下有名为"roo ...

  9. svn 设置

    \Release *\Debug *\bin *\Bin *\obj *\_ReSharper* *\.hg *.ReSharper *.resharper *\Generated_Code *\VB ...

  10. iOS 和Android中的基本日期处理

    提到日期处理,主要有2个参数,一个是所在的时区,一个是所用的日历方法. 主要涉及2大类问题,一类是日期类型和字符串之间的转化,另一类是日期的计算问题.ios和android都提供了相应的类来处理问题. ...