JZOJ 1980. 【2011集训队出题】Construct
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相关推荐
- 【2011集训队出题】跳跳棋
[2011集训队出题]跳跳棋 Time Limits: 1000 ms Memory Limits: 128000 KB Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点 ...
- bzoj2144 [2011集训队出题] 跳跳棋 倍增 lca
Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把 ...
- 【2011集训队出题】拆迁队
Description: lanxisi带领着他的拆迁队来整治一个街道.这个街道由N个旧房子组成,从左到右编号为1..N.每个旧房子i有一个正整数的美观度Ai. lanxisi希望整个街道从左到右美观 ...
- jzoj 2867. 【集训队互测 2012】Contra
Description 偶然间,chnlich 发现了他小时候玩过的一个游戏"魂斗罗",于是决定怀旧.但是这是一个奇怪的魂斗罗 MOD. 有 N 个关卡,初始有 Q 条命. 每通过 ...
- [JZOJ1901] 【2010集训队出题】光棱坦克
题目 题目大意 给你个平面上的一堆点,问序列pi{p_i}pi的个数. 满足ypi−1>ypiy_{p_{i-1}}>y_{p_i}ypi−1>ypi并且xpix_{p_i ...
- 【2019暑假集训】08.07比赛总结
省选组真的比A组简单...远古时期的集训队出题难度都不大 比赛思路 传送门 T1( 拯救Protoss的故乡):树形DP???暴力操作显然不可行.模型很像网络流,有的边费用为0,有的边费用为1,所以直 ...
- happiness[国家集训队2011(吴确)]
[试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...
- 国家集训队2011 happiness
[试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...
- [国家集训队2011]跳跳棋
P1852 [国家集训队]跳跳棋https://www.luogu.org/problemnew/show/P1852 Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不 ...
最新文章
- 表表达式,Substring, CharIndex, 多行数据变同一行的用法
- 深度学习RCNN, Fast-RCNN, Faster-RCNN的一些事
- 【SSH异常】InvalidDataAccessApiUsageException异常
- 日计不足涓滴成河-自定义响应结果格式化器
- java人体识别_用华为HMS ML kit人体骨骼识别技术,Android快速实现人体姿势动作抓拍...
- 任务并行VS数据并行
- Python使用广度优先和深度优先两种方法遍历目录树
- java 乘法 位移_Java:移位实现的乘除法
- 制作PPT和画报的免费素材:pixabay免费照片插图矢量图
- 001.Heartbeat简介
- ubuntu浏览器突然使用不了搜狗拼音法
- java清除不掉cookie,java清除cookie
- PS笔刷:73款动漫风格的云朵小草花朵
- 怎样写作数学建模竞赛论文
- 【雅思大作文考官范文】——第十三篇:'traditions and technology' essay
- excel 批量翻译-excel 批量函数公司翻译大全免费
- Lvs+keepAlived实现负载均衡高可用集群(DR实现)
- Apollo二次规划的应用之PWJ
- 关于CMS的两个常用参数的解读
- 南加大计算机科学硕士费用,南加州大学计算机科学硕士排名第15(2020年TFE Times排名)...
热门文章
- http://www.mamicode.com/info-detail-1208112.html
- Git学习笔记:如何删除GitHub上的项目
- 图像处理之ROI区域裁剪
- 组会PPT20201120《不同初始电子密度下ne和Te演化》
- [云炬创业基础笔记] 创业机会的评价标准与SWOT分析
- 云炬随笔20170201
- 云炬随笔20170901
- io python_python学习笔记 - StringIO以及BytesIO
- Unet项目解析(2):./src/retinaNN_training.py
- OpenGL编程指南4:双缓冲实现运行