Clumsy Keke

题目链接(点击)

Problem Description

Keke is currently studying engineering drawing courses, and the teacher has taught her how to find its volume through the three views of the part. But her brain doesn't work well that she can't find the volume of complex parts. So she needs your help.

To simplify the problem, the part is made up of cubes with side length 1, and the vertices of these cubes are all on the grid. Give you three 0/1 matrices, each representing each of the three views. 0 means that there is no projection of cubes at this position of the view; 1 means that there is a projection of cubes at this position of the view.

Now Keke wants you to help her find the volume of the part determined by the three views.

Input

There are mutiple test cases, the number of which is no more than 10. For each test case:

The first line of input contains three integers mx,my,mz(1≤mx,my,mz≤99) , which represent the coordinate range of all possible cubes (i.e. all possible cubes are in the cuboid area whose body diagonal is from (1,1,1) to (mx,my,mz)).

Following input a 0/1 matrix with mx lines and my columns representing the front view, and the y-th column of the x-th row represents the projection of all the cubes in the front view such as (x,y,?).

Following input a 0/1 matrix with my lines and mz columns representing the side view, and the z-th column of the y-th row represents the projections of all the cubes in the side view such as (?,y,z).

Following input a 0/1 matrix with mz lines and mx columns representing the top view, and the x-th column of the z-th row represents the projection of all the cubes of the top view such as (x,?,z).

The '?' in the above coordinates represents any integer. Numbers in the same line are separated by spaces. For more detailed input information, please see the sample.

Output

For each test case:

The first line of output should contain an integer, representing the volume of the part determined by the three views. If the determined part is not unique, find the largest of all possible parts.

Keke's teacher promises that there is at least one part that satisfies the input.

Sample Input

5 6 4
1 1 1 1 1 1
0 0 0 1 0 1
0 0 0 1 0 1
0 0 0 0 0 1
0 0 0 0 0 1
0 1 1 0
1 0 0 1
0 0 0 1
0 0 0 1
0 0 0 1
1 1 1 1
1 0 0 0 0
1 0 0 0 0
1 0 0 0 0
1 1 1 1 1

Sample Output

17

Hint

思路:

找了好长时间的规律最终失败 后来想起来可以先把符合正视图的坐标保存起来 然后通过后面两个视图筛 听学长说这就是模拟

开三维数组 模拟空间的x、y、z的坐标 感觉很神奇 ……

但自己敲的时候 因为没好好找坐标原点导致自己超级混乱 又看到给出的点和下面的视图并不是相同方向的 就不知所措了

仔细想了想其实这样给点是超级巧妙的:

建立如图坐标系:

在第一组数据中 描述x和y的关系 输入的点中左上角代表原点(真的是空间坐标原点) 向右为y 向下为x 均从零依次增大  再去标记点岂不是很容易

同理 第二次输入z和y的关系 左上角依然是原点

所以建立坐标系一定要找准原点 不然就像刚开始那样乱找关系 容易错误

AC代码:

#include<stdio.h>
#include<string.h>
const int MAX=1e2;
int main()
{
int a[MAX+5][MAX+5][MAX+5],x,y,z;
while(~scanf("%d%d%d",&x,&y,&z)){
memset(a,0,sizeof(a));
int sum=0; ///标记的总个数-后来删去的个数=最终结果 开始是最后重新跑了
for(int i=0;i<x;i++){ ///次循环判断个数 但T了 只好这样改了
for(int j=0;j<y;j++){
int num;
scanf("%d",&num);
if(num==1){
for(int k=0;k<z;k++){
a[i][j][k]=1;
sum++; ///符合主视图 条件的所有点的个数
}
}
}
}
for(int i=0;i<y;i++){
for(int j=0;j<z;j++){
int num;
scanf("%d",&num);
if(num==0){
for(int k=0;k<x;k++){
if(a[k][i][j]==1){
a[k][i][j]=-1;
sum--; ///从原来标记的点中删去不符合侧视图的点
}
}
}
}
}
for(int i=0;i<z;i++){
for(int j=0;j<x;j++){
int num;
scanf("%d",&num);
if(num==0){
for(int k=0;k<y;k++){
if(a[j][k][i]==1){
a[j][k][i]=-1;
sum--; ///从原来标记的点中删去不符合俯视图的点
}
}
}
}
}
printf("%d\n",sum);
}
return 0;
}

Clumsy Keke【模拟+三维数组】的更多相关文章

  1. jquery 根据后台传递过来的三维数组动态生成三级菜单

    根据后台传递过来的三维数组动态生成三级菜单 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  2. Jni :三维数组处理方法 ,以整形三维数组为例 C++实现

    本文原创,转载请注明地址:http://www.cnblogs.com/baokang/p/4982846.html 关于Jni的基本使用方法,请参阅:Java 调用 C++ (Java 调用 dll ...

  3. C语言三维数组分解

    很多人在学习C的时候,感觉三维数组很难想象,而且不理解深度是什么?做了一个图,帮大家分解一下                                                       ...

  4. Java 一维数组 二维数组 三维数组

    二维数组包含一位数组  三维数组就是在二维数组的基础上,再加一层.把二维数组看做是一维数组就可以了,按照上述理解类推.   下面是 一维 二维 三维数组例子   一维数组: int[] array1 ...

  5. 三维数组——与 宝玉QQ群讨论交流之二

    宝玉 12:27:35 这几天看了大部分大家交的作业,发现一个主要问题还是卡在对三维数组的理解上,之前把三维数组类比成三维空间可能会造成误导 宝玉 12:27:45 其实鞠老师解释的很好: 三维数组 ...

  6. c# 基础之数组(包含三维数组)

    public enum ChessType { White = , None=, Black=, } class Program { static void Main(string[] args) { ...

  7. php三维数组变二维数组

    <?php $result = Array(0 => Array(0 => Array(bid => 41,brealname => 'we教官',cid => 4 ...

  8. C++类实现三维数组算法

    在学习北京大学教授的<程序设计实习 / Practice on Programming>中,遇到了一个习题,花了很长时间研究,现在分享出来: 课题地址:https://class.cour ...

  9. java读取目录下所有csv文件数据,存入三维数组并返回

    package dwzx.com.get; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; ...

随机推荐

  1. Apache 慢连接dos

    http://neue.v2ex.com/t/108717------不实用 http://www.blogjava.net/bukebushuo/articles/293776.html http: ...

  2. BZOJ1080 暴力+位移运算符的用法

    1080: [SCOI2008]劣质编码 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 337  Solved: 148[Submit][Status ...

  3. vue-cli 如何修改或删除预设preset记录

    preset其实是你在create新vue项目的时候,生成的插件配置项预设,也就是你在项目中需要用到的插件安装成功了之后,会生成一个关于preset的文件,当你再次create新的vue项目的时候,就 ...

  4. win-sudo插件解决Git bash 执行脚本报错问题 bash: sudo: command not found

    Windows git bash 默认没有sudo命令,可以添加win-sudo插件实现该功能 curl -s https://raw.githubusercontent.com/imachug/wi ...

  5. zwx_helper 只用小括号()和中括号[ ] 轻松开发wxWidgets

    https://github.com/bbqz007/zhelper-wxWidgets https://github.com/bbqz007/zhelper-wxWidgets/tree/maste ...

  6. Jmeter基础-HTTP请求

    启动Jmeter 打开jmeter/bin文件/jmeter.bat(Windows执行文件)文件,就可以启动jmeter了 1.创建测试计划 启动后默认有一个TestPlan(测试计划),可修改其名 ...

  7. 工业互联网可视化系统风格的抉择:线框模式之 3D 数据中心机房的实现

    前言 3D 可视化,就是把复杂抽象的数据信息,以合适的视觉元素及视角去呈现,方便系统的展示.维护和管理.而在可视化系统的搭建选择上,所呈现的风格样式效果多种多样,各自所突出的适用场合也不尽相同.对于科 ...

  8. linux查看磁盘使用情况命令

    第一:统一磁盘整体情况,包括磁盘大小,已使用,可用1.查看当前目录命令 df -h1结果: 统一每个目录下磁盘的整体情况 2.查看指定目录在命令后直接放目录名,比如查看“usr”目录使用情况: df ...

  9. js 滚动条滑动

    toTop() { let top = document.documentElement.scrollTop || document.body.scrollTop; // 实现滚动效果 const t ...

  10. C# 数据操作系列 - 17 Dapper ——号称可以与ADO.NET 同台飙车的ORM

    0. 前言 之前四篇介绍了一个国内开发者开发的优秀框架SqlSugar,给我们眼前一亮的感觉.这一篇,我们将试试另一个出镜率比较高的ORM框架-Dapper. Dapper是一个轻量级的ORM框架,其 ...