hdu 5538 House Building 基础题
2015-11-01 16:25
393 查看
House Building
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
Problem Description
Have you ever played the video game Minecraft? This game has been one of the world's most popular game in recent years. The world of Minecraft is made up of lots of 1×1×1 blocks
in a 3D map. Blocks are the basic units of structure in Minecraft, there are many types of blocks. A block can either be a clay, dirt, water, wood, air, ... or even a building material such as brick or concrete in this game.
Figure 1: A typical world in Minecraft.
Nyanko-san is one of the diehard fans of the game, what he loves most is to build monumental houses in the world of the game. One day, he found a flat ground in some place. Yes, a super flat ground without any roughness, it's really a lovely place to build
houses on it. Nyanko-san decided to build on a n×m big
flat ground, so he drew a blueprint of his house, and found some building materials to build.
While everything seems goes smoothly, something wrong happened. Nyanko-san found out he had forgotten to prepare glass elements, which is a important element to decorate his house. Now Nyanko-san gives you his blueprint of house and asking for your help. Your
job is quite easy, collecting a sufficient number of the glass unit for building his house. But first, you have to calculate how many units of glass should be collected.
There are n rows
and m columns
on the ground, an intersection of a row and a column is a 1×1 square,and
a square is a valid place for players to put blocks on. And to simplify this problem, Nynako-san's blueprint can be represented as an integer array ci,j(1≤i≤n,1≤j≤m).
Which ci,j indicates
the height of his house on the square of i-th
row and j-th
column. The number of glass unit that you need to collect is equal to the surface area of Nyanko-san's house(exclude the face adjacent to the ground).
Input
The first line contains an integer T indicating
the total number of test cases.
First line of each test case is a line with two integers n,m.
The n lines
that follow describe the array of Nyanko-san's blueprint, the i-th
of these lines has m integers ci,1,ci,2,...,ci,m,
separated by a single space.
1≤T≤50
1≤n,m≤50
0≤ci,j≤1000
Output
For each test case, please output the number of glass units you need to collect to meet Nyanko-san's requirement in one line.
Sample Input
2
3 3
1 0 0
3 1 2
1 1 0
3 3
1 0 1
0 0 0
1 0 1
Sample Output
30
20
Figure 2: A top view and side view image for sample test case 1.
#include<cstdio> #include<string> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<climits> #include<queue> #include<vector> #include<map> #include<sstream> #include<set> #include<stack> #include<cctype> #include<utility> #pragma comment(linker, "/STACK:102400000,102400000") #define PI 3.1415926535897932384626 #define eps 1e-10 #define sqr(x) ((x)*(x)) #define FOR0(i,n) for(int i=0 ;i<(n) ;i++) #define FOR1(i,n) for(int i=1 ;i<=(n) ;i++) #define FORD(i,n) for(int i=(n) ;i>=0 ;i--) #define lson num<<1,le,mid #define rson num<<1|1,mid+1,ri #define MID int mid=(le+ri)>>1 #define zero(x)((x>0? x:-x)<1e-15) #define mk make_pair #define _f first #define _s second using namespace std; //const int INF= ; typedef long long ll; //const ll inf =1000000000000000;//1e15; //ifstream fin("input.txt"); //ofstream fout("output.txt"); //fin.close(); //fout.close(); //freopen("a.in","r",stdin); //freopen("a.out","w",stdout); const int INF =0x3f3f3f3f; //const int maxn= ; //const int maxm= ; int n,m; int height[53][53]; int dir[4][2]={{-1,0},{+1,0},{0,-1},{0,+1}}; bool in(int y,int x) { return 1<=y&&y<=n&&1<=x&&x<=m; } int cal(int y,int x) { int ans=0; for(int i=0;i<4;i++) { int ty=y+dir[i][0]; int tx=x+dir[i][1]; if(!in(ty,tx)) { ans+=height[y][x];continue;} int delta=height[y][x]-height[ty][tx]; if( delta<=0 ) continue; ans+=delta; } if(height[y][x]) ans++; return ans; } int main() { int T,h;scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&h); height[i][j]=h; } } int ans=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { ans+=cal(i,j); } } printf("%d\n",ans); } return 0; }
相关文章推荐
- easyui-datagrid的一些操作记录
- hdu1297 Children’s Queue (动态规划,n个人排成一列的方案数+高精加)
- 消息队列机制messageQuene
- queue的用法
- requirejs项目部署
- required定义
- OC 学习笔记4 NSSet NSMutableSet NSDictionary NSMutableDictionary NSNumber NSValue
- [Chromium官方博客文章转载]Jank Busters Part One(UI Jank指的是界面来不及刷新导致的卡塞空白现象?
- ros_fuerte创建工作空间、创建ROS功能包、编译ROS功能包、创建节点(cpp)、编译节点、使用launch文件、创建srv和msg文件、使用新建的srv和msg文件
- new Integer(text).intValue()的用法
- InterView common question
- ios学习之苹果官方文档的学习(UIFocusUpdateContext方面)
- hadoop 之 InputFormat类 --- KeyValueTextInputFormat 实例
- Codeforces Round #328 (Div. 2) B. The Monster and the Squirrel 打表数学
- InputSplit—>RecordReder—>map(key,value,context)的过程解析
- POJ 1947 Rebuilding Roads(树形DP)
- NGUI简单的UI功能操作
- IOS-UITableView上的纯代码实现
- cf#328-B. The Monster and the Squirrel-水题+数学规律
- HDU 5531 Rebuild 相切的圆们