昨天校内比赛做了一个很有意思的题,体面如图:

题目大概意思是,给出一个俯视图矩阵,矩阵内元素表示当前位置有多少个方块,最后要求输出该立体图形中面的数量。

首先给出一组数据:

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的更多相关文章

  1. 如何由Height Map生成Normal Map

    转自:http://www.cnblogs.com/cxrs/archive/2009/11/01/1594155.html Nvidia和ATI都有相应的工具把Heightmap转成NormalMa ...

  2. shader复杂与深入:Normal Map(法线贴图)1

    转自:http://www.zwqxin.com/archives/shaderglsl/review-normal-map-bump-map.htmlNormal Map法线贴图,想必每个学习计算机 ...

  3. 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 ...

  4. [SharpMap] 屏幕坐标和Map坐标转换

    1. SharpMap中屏幕坐标和地图Map坐标转换: using System.Drawing; using GeoAPI.Geometries; namespace SharpMap.Utilit ...

  5. echarts3结合openlayers2实现Map类型图表

    网上查阅了部分资料,有些是用echarts2实现的,因echarts2无法满足项目中其他部分的要求,故只能采用echarts3(2017/9/18,echarts3官网突然把基于geo的demo下架了 ...

  6. (转)简述47种Shader Map的渲染原理与制作方法

    在Shader中会使用各种不同图参与渲染,所以简单地总结下各种图的渲染原理.制作方法,最后面几种是程序生成图. 1. Albedo 2. Diffuse(Photographic) 从上图可以看出来, ...

  7. [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 ...

  8. Android二维码的生成,解析以及扫描功能

    <1> 布局只有2个按钮,实现生成二维码和解析二维码 <Button android:layout_width="wrap_content" android:la ...

  9. QT_地图导航

    //地图显示功能 #ifndef MAPWIDGET_H #define MAPWIDGET_H #include <QGraphicsView> #include <QLabel& ...

随机推荐

  1. 与 HTML4 比较,HTML5 废弃了哪些元素?

    frame frameset noframe applet big center basefront

  2. Windows下使用beego遇到的问题

    一.解决:cc1.exe: sorry, unimplemented: 64-bit mode not compiled in: 参考链接:http://blog.csdn.net/mecho/art ...

  3. flask --db-Column属性

    db.Column 中其余的参数指定属性的配置选项. 选项名 说 明 primary_key 如果设为 True,这列就是表的主键 unique 如果设为 True,这列不允许出现重复的值 index ...

  4. springmvc之Hello World及常用注解

    步骤: 加入jar包 在web.xml 中配置DispacherServlet 加入SpringMVC 配置文件springmvc.xml 编写请求处理器(action/controller) 编写视 ...

  5. 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 ...

  6. vscode 常用插件安装

    设置中文语言使用快捷键[Ctrl+Shift+P],弹出的搜索框中输入[configure language],然后选择搜索出来的[Configure Display Language],locale ...

  7. RxJava2 中多种取消订阅 dispose 的方法梳理( 源码分析 )

    Github 相关代码: Github地址 一直感觉 RxJava2 的取消订阅有点混乱, 这样也能取消, 那样也能取消, 没能系统起来的感觉就像掉进了盘丝洞, 迷乱… 下面说说这几种情况 几种取消的 ...

  8. IOS NSBundle使用(访问文件夹)

    NSBundle的相关信息 1.一个NSBundle代表一个文件夹,利用NSBundle能访问对应的文件夹 2.利用mainBundle就可以访问软件资源包中的任何资源 3.模拟器应用程序的安装路径: ...

  9. UVA 11404 Plalidromic Subsquence (回文子序列,LCS)

    最长回文子序列可以用求解原串s和反转串rv的LCS来得到,因为要求回文串分奇偶,dp[i][j]保存长度, 要求字典序最小,dp[i][j]应该表示回文子序列的端点,所以边界为单个字符,即i+j=le ...

  10. hdu-1875 畅通工程再续---MST

    题目链接: https://vjudge.net/problem/HDU-1875 题目大意: 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小 ...