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

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

首先给出一组数据:

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. Spring AOP的增强处理

    就是@Before @Around @AfterReturning @AfterThrowing这几个标签的属性可以放到方法参数里面获取 例子 //正常操作@Around("service( ...

  2. 斗鱼扩展--拦截替换js_辅助抢宝箱(六)

    代码可以在 https://pan.baidu.com/s/1uN120-18hvAzELpJCQfbXA  处下载 说思路 页面加载一段时间后,判断页面有没有宝箱,如果没有就停止注入js,如果有则 ...

  3. 项目上传至Github

    到https://github.com/ 注册用户,然后点 Start a project,创建仓库 记住这个 地址. 再去 https://git-scm.com/downloads 下载git 安 ...

  4. 使用AlarmManager定期执行工作

    新建一个Service来模拟后台执行的程序,PollingService.java: package com.ryantang.rtpollingdemo; import android.app.No ...

  5. 电脑没有声音,显示“未插入耳机或扬声器”,检测不到Realtek高清晰音频管理器

    2018-7-16,电脑彻夜未关,早上发现已经死机了.关机重启之后,就发现没有声音了,提示“未插入耳机或扬声器”,并且检测不到Realtek高清晰音频管理器,只能检查到显卡音频输出.首先,音箱在其他电 ...

  6. java如何导入Excel文件

    Java使用POI导入Excel文件,操作起来比较简单,支持xlsx格式. 下载POI资源包 从官网https://poi.apache.org/下载POI,笔者选择的是版本是3.17,下载后文件名是 ...

  7. Nobody gives away anything valuable for free.

    Nobody gives away anything valuable for free.没人会给你免费的午餐.

  8. 根据accept-language自动设置UICulture和Culture

    在web.config中添加如下配置: <system.web> <globalization uiCulture="auto" culture="au ...

  9. Object.keys 函数 (JavaScript)

    Object.keys 函数 (JavaScript) 返回对象的可枚举属性和方法的名称. 在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys() ...

  10. 浅谈前端性能优化(二)——对HTTP传输进行压缩

    1.前端性能优化的一点: 对js.css.图片等进行压缩,尽可能减小文件的大小,减少文件下载的时间,从而减少网页响应的时间. 2.前端性能优化的另一点: 对HTTP传输进行压缩,即在js,css.图片 ...