HOJ 13819 Height map
昨天校内比赛做了一个很有意思的题,体面如图:
题目大概意思是,给出一个俯视图矩阵,矩阵内元素表示当前位置有多少个方块,最后要求输出该立体图形中面的数量。
首先给出一组数据:
3 4
2 1 2 1
1 2 3 2
2 1 2 1
这组数据的正解是34,如果需要更多组测试, 把这个图形掉个头,就好。如图:
具体思路是,分不同的面进行统计:首先使用深搜找到所有联通的顶层快,得出面的数量,之后对于每个面(前,后,左,右)进行遍历,得出“多出来的面”的数量。其中有且仅有“沿着遍历方向,后一个高于前一个,更高的面与上一行的面不连通”可以使得面的数量增加。
show the code
#include<iostream>
#include<stdio.h>
#include<string>
#include<set>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std; const long long MAXN=; long long mapp[MAXN][MAXN];
long long m,n; long long topp=;
long long addd[MAXN][MAXN][];
long long checkk[MAXN*MAXN]; void dfs(long long x,long long y)
{
if(checkk[x*MAXN+y]==)return;
checkk[x*MAXN+y]=;
long long now=mapp[x][y];
if(mapp[x+][y]==now)dfs(x+,y);
if(mapp[x][y+]==now)dfs(x,y+);
if(x>=&&mapp[x-][y]==now)dfs(x-,y);
if(y>=&&mapp[x][y-]==now)dfs(x,y-);
}
long long calTop()
{
for(long long i=;i<n;++i)
{
for(long long j=;j<m;++j)
{
if(checkk[i*MAXN+j]!=)topp++,dfs(i,j);
}
}
// cout<<topp<<endl;
} void init()
{
cin>>n>>m;
for(long long i=;i<n;++i)
{
for(long long j=;j<m;++j)
{
cin>>mapp[i][j];
}
}
} long long right()
{
long long res=;
for(long long i=;i<n;++i)
{
for(long long j=;j<m;++j)
{
if(mapp[i][j]>mapp[i][j-])
{
res++;
addd[i][j][]++;
if(i>&&addd[i-][j][]==&&mapp[i-][j-]<mapp[i][j]&&mapp[i-][j]>mapp[i][j-])
{
res--;
} }
}
}
return res;
}
long long left()
{
long long res=;
for(long long i=;i<n;++i)
{
for(long long j=m-;j>=;--j)
{
if(mapp[i][j]>mapp[i][j+])
{
res++;
addd[i][j][]++;
if(i>&&addd[i-][j][]==&&mapp[i-][j+]<mapp[i][j]&&mapp[i-][j]>mapp[i][j+])
{
res--;
} }
}
} return res;
} long long top()
{
long long res=;
for(long long j=;j<m;++j)
{
for(long long i=;i<n;++i)
{
if(mapp[i][j]>mapp[i-][j])
{
res++;
addd[i][j][]++;
if(j>&&addd[i][j-][]==&&mapp[i-][j-]<mapp[i][j]&&mapp[i][j-]>mapp[i-][j])
{
res--;
} } }
}
return res;
} long long bottom()
{
long long res=;
for(long long j=;j<m;++j)
{
for(long long i=n-;i>=;--i)
{
if(mapp[i][j]>mapp[i+][j])
{
res++;
addd[i][j][]++;
if(j>&&addd[i][j-][]==&&mapp[i+][j-]<mapp[i][j]&&mapp[i][j-]>mapp[i+][j])
{
res--;
}
}
}
}
return res;
}
int main()
{
memset(mapp,-,sizeof(mapp));
memset(addd,,sizeof(addd));
memset(checkk,,sizeof(checkk)); cin.sync_with_stdio(false); init();
calTop(); topp+=;
topp+=right();
topp+=left();
topp+=top();
topp+=bottom();
cout<<topp<<endl;
return ;
}
最后。学校老服务器性能不行,加一行cin.sync_with_stdio(false);分分钟AC。
HOJ 13819 Height map的更多相关文章
- 如何由Height Map生成Normal Map
转自:http://www.cnblogs.com/cxrs/archive/2009/11/01/1594155.html Nvidia和ATI都有相应的工具把Heightmap转成NormalMa ...
- shader复杂与深入:Normal Map(法线贴图)1
转自:http://www.zwqxin.com/archives/shaderglsl/review-normal-map-bump-map.htmlNormal Map法线贴图,想必每个学习计算机 ...
- ROS_Kinetic_x ROS栅格地图庫 Grid Map Library
源自:https://github.com/ethz-asl/grid_map Grid Map Overview This is a C++ library with ROS interface t ...
- [SharpMap] 屏幕坐标和Map坐标转换
1. SharpMap中屏幕坐标和地图Map坐标转换: using System.Drawing; using GeoAPI.Geometries; namespace SharpMap.Utilit ...
- echarts3结合openlayers2实现Map类型图表
网上查阅了部分资料,有些是用echarts2实现的,因echarts2无法满足项目中其他部分的要求,故只能采用echarts3(2017/9/18,echarts3官网突然把基于geo的demo下架了 ...
- (转)简述47种Shader Map的渲染原理与制作方法
在Shader中会使用各种不同图参与渲染,所以简单地总结下各种图的渲染原理.制作方法,最后面几种是程序生成图. 1. Albedo 2. Diffuse(Photographic) 从上图可以看出来, ...
- [LeetCode] Trapping Rain Water II 收集雨水之二
Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevati ...
- Android二维码的生成,解析以及扫描功能
<1> 布局只有2个按钮,实现生成二维码和解析二维码 <Button android:layout_width="wrap_content" android:la ...
- QT_地图导航
//地图显示功能 #ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QGraphicsView> #include <QLabel& ...
随机推荐
- 与 HTML4 比较,HTML5 废弃了哪些元素?
frame frameset noframe applet big center basefront
- Windows下使用beego遇到的问题
一.解决:cc1.exe: sorry, unimplemented: 64-bit mode not compiled in: 参考链接:http://blog.csdn.net/mecho/art ...
- flask --db-Column属性
db.Column 中其余的参数指定属性的配置选项. 选项名 说 明 primary_key 如果设为 True,这列就是表的主键 unique 如果设为 True,这列不允许出现重复的值 index ...
- springmvc之Hello World及常用注解
步骤: 加入jar包 在web.xml 中配置DispacherServlet 加入SpringMVC 配置文件springmvc.xml 编写请求处理器(action/controller) 编写视 ...
- How to Install Apache Solr 4.5 on CentOS 6.4
By Shay Anderson on October 2013 Knowledge Base / Linux / How to Install Apache Solr 4.5 on Cent ...
- vscode 常用插件安装
设置中文语言使用快捷键[Ctrl+Shift+P],弹出的搜索框中输入[configure language],然后选择搜索出来的[Configure Display Language],locale ...
- RxJava2 中多种取消订阅 dispose 的方法梳理( 源码分析 )
Github 相关代码: Github地址 一直感觉 RxJava2 的取消订阅有点混乱, 这样也能取消, 那样也能取消, 没能系统起来的感觉就像掉进了盘丝洞, 迷乱… 下面说说这几种情况 几种取消的 ...
- IOS NSBundle使用(访问文件夹)
NSBundle的相关信息 1.一个NSBundle代表一个文件夹,利用NSBundle能访问对应的文件夹 2.利用mainBundle就可以访问软件资源包中的任何资源 3.模拟器应用程序的安装路径: ...
- UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
最长回文子序列可以用求解原串s和反转串rv的LCS来得到,因为要求回文串分奇偶,dp[i][j]保存长度, 要求字典序最小,dp[i][j]应该表示回文子序列的端点,所以边界为单个字符,即i+j=le ...
- hdu-1875 畅通工程再续---MST
题目链接: https://vjudge.net/problem/HDU-1875 题目大意: 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小 ...