Description

  随着改革开放的深入推进……
  小T家要拆迁了……
  当对未来生活充满美好憧憬的小T看到拆迁协议书的时候,小T从一位大好的社会主义青年变成了绝望的钉子户。
  由于小T的家位于市中心,拆迁工作又难以进行,有关部门决定先把小T家用围栏围起来,以免影响市容。考虑到要建设资源节约型社会,他们希望所用的围栏长度越短越好,由于市中心寸土寸金,在围栏长度最短的情况下,围出的多边形面积越小越好。
  为了简化问题,我们约定,小T的家是一个多边形,并且每条边与坐标轴平行,围栏构成的也是多边形,每条边与坐标轴平行。

Input

  在第一行列出整数n——多边形的顶点的数量。在以下n行中的每一行都有两个整数——沿逆时针方向走过这个多边形顺次所经过的顶点的坐标。边界的任意三个连续顶点不在一条直线上。多边形的边界不含自交和自切。

Output

  输出两行,第一行为围栏最短的长度,第二行为长度最短的前提下,最小的面积。

Sample Input

8
0 0
9 0
9 9
6 9
6 3
3 3
3 6
0 6

Sample Output

36
63

Data Constraint

Hint

【数据范围】
  对于10%的数据n≤20
  对于70%的数据n≤5000
  对于100%的数据4≤n≤100000,坐标的绝对值不超过10^9 。

Solution

  • 首先,可以发现周长是一定的,就是用一个矩形套住那个多边形。

  • 之后又可以发现,为了使面积最小,肯定是在矩形的四周挖去一些类似锯齿形的多边形。

  • 于是我们把点排序,用一个单调栈处理点,四个角各处理一遍即可。

  • 时间复杂度 O(N log N)O(N\ log\ N) 。

Code

#include<cstdio>
#include<algorithm>
#include<cctype>
using namespace std;
typedef long long LL;
const int N=1e5+1;
const LL inf=1e10;
struct data
{LL x,y;
}a[N],p1,p2;
int top;
LL sum;
LL st[N];
inline int read()
{int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
inline LL min(LL x,LL y){return x<y?x:y;}
inline LL max(LL x,LL y){return x>y?x:y;}
inline bool cmp(data x,data y)
{return x.x<y.x || x.x==y.x && x.y<y.y;
}
int main()
{int n=read();p1.x=p1.y=inf,p2.x=p2.y=-inf;for(int i=1;i<=n;i++){a[i].x=read(),a[i].y=read();p1.x=min(p1.x,a[i].x),p1.y=min(p1.y,a[i].y);p2.x=max(p2.x,a[i].x),p2.y=max(p2.y,a[i].y);}sort(a+1,a+1+n,cmp);sum=(p2.x-p1.x)*(p2.y-p1.y);for(int i=1;i<=n;i++)if(!top) st[++top]=i; else{if(a[st[top]].y<a[i].y){if(a[st[top]].x^a[i].x) top++;st[top]=i;}if(a[i].y==p2.y) break;}for(int i=2;i<=top;i++) sum-=(a[st[i]].y-a[st[i-1]].y)*(a[st[i]].x-a[st[1]].x);top=0;for(int i=n;i;i--)if(!top) st[++top]=i; else{if(a[st[top]].y<a[i].y){if(a[st[top]].x^a[i].x) top++;st[top]=i;}if(a[i].y==p2.y) break;}for(int i=2;i<=top;i++) sum-=(a[st[i]].y-a[st[i-1]].y)*(a[st[1]].x-a[st[i]].x);top=0;for(int i=1;i<=n;i++)if(!top) st[++top]=i; else{if(a[st[top]].y>a[i].y){if(a[st[top]].x^a[i].x) top++;st[top]=i;}if(a[i].y==p1.y) break;}for(int i=2;i<=top;i++) sum-=(a[st[i-1]].y-a[st[i]].y)*(a[st[i]].x-a[st[1]].x);top=0;for(int i=n;i;i--)if(!top) st[++top]=i; else{if(a[st[top]].y>a[i].y){if(a[st[top]].x^a[i].x) top++;st[top]=i;}if(a[i].y==p1.y) break;}for(int i=2;i<=top;i++) sum-=(a[st[i-1]].y-a[st[i]].y)*(a[st[1]].x-a[st[i]].x);printf("%lld\n%lld",2*(p2.x-p1.x+p2.y-p1.y),sum);return 0;
}

JZOJ 1980. 【2011集训队出题】Construct相关推荐

  1. 【2011集训队出题】跳跳棋

    [2011集训队出题]跳跳棋 Time Limits: 1000 ms Memory Limits: 128000 KB Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点 ...

  2. bzoj2144 [2011集训队出题] 跳跳棋 倍增 lca

    Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把 ...

  3. 【2011集训队出题】拆迁队

    Description: lanxisi带领着他的拆迁队来整治一个街道.这个街道由N个旧房子组成,从左到右编号为1..N.每个旧房子i有一个正整数的美观度Ai. lanxisi希望整个街道从左到右美观 ...

  4. jzoj 2867. 【集训队互测 2012】Contra

    Description 偶然间,chnlich 发现了他小时候玩过的一个游戏"魂斗罗",于是决定怀旧.但是这是一个奇怪的魂斗罗 MOD. 有 N 个关卡,初始有 Q 条命. 每通过 ...

  5. [JZOJ1901] 【2010集训队出题】光棱坦克

    题目 题目大意 给你个平面上的一堆点,问序列pi{p_i}pi​的个数. 满足ypi−1>ypiy_{p_{i-1}}>y_{p_i}ypi−1​​>ypi​​并且xpix_{p_i ...

  6. 【2019暑假集训】08.07比赛总结

    省选组真的比A组简单...远古时期的集训队出题难度都不大 比赛思路 传送门 T1( 拯救Protoss的故乡):树形DP???暴力操作显然不可行.模型很像网络流,有的边费用为0,有的边费用为1,所以直 ...

  7. happiness[国家集训队2011(吴确)]

    [试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...

  8. 国家集训队2011 happiness

    [试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...

  9. [国家集训队2011]跳跳棋

    P1852 [国家集训队]跳跳棋https://www.luogu.org/problemnew/show/P1852 Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不 ...

最新文章

  1. 表表达式,Substring, CharIndex, 多行数据变同一行的用法
  2. 深度学习RCNN, Fast-RCNN, Faster-RCNN的一些事
  3. 【SSH异常】InvalidDataAccessApiUsageException异常
  4. 日计不足涓滴成河-自定义响应结果格式化器
  5. java人体识别_用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍...
  6. 任务并行VS数据并行
  7. Python使用广度优先和深度优先两种方法遍历目录树
  8. java 乘法 位移_Java:移位实现的乘除法
  9. 制作PPT和画报的免费素材:pixabay免费照片插图矢量图
  10. 001.Heartbeat简介
  11. ubuntu浏览器突然使用不了搜狗拼音法
  12. java清除不掉cookie,java清除cookie
  13. PS笔刷:73款动漫风格的云朵小草花朵
  14. 怎样写作数学建模竞赛论文
  15. 【雅思大作文考官范文】——第十三篇:'traditions and technology' essay
  16. excel 批量翻译-excel 批量函数公司翻译大全免费
  17. Lvs+keepAlived实现负载均衡高可用集群(DR实现)
  18. Apollo二次规划的应用之PWJ
  19. 关于CMS的两个常用参数的解读
  20. 南加大计算机科学硕士费用,南加州大学计算机科学硕士排名第15(2020年TFE Times排名)...

热门文章

  1. http://www.mamicode.com/info-detail-1208112.html
  2. Git学习笔记:如何删除GitHub上的项目
  3. 图像处理之ROI区域裁剪
  4. 组会PPT20201120《不同初始电子密度下ne和Te演化》
  5. [云炬创业基础笔记] 创业机会的评价标准与SWOT分析
  6. 云炬随笔20170201
  7. 云炬随笔20170901
  8. io python_python学习笔记 - StringIO以及BytesIO
  9. Unet项目解析(2):./src/retinaNN_training.py
  10. OpenGL编程指南4:双缓冲实现运行