关于 熬夜的惩罚 一题的思路+代码(几何)
题目来源:NEFU OJ-2175.熬夜的惩罚
题目描述
卡迪亚得到你给他的答案,就蹦跶蹦跶地去下载游戏了,不过由于游戏太多,一直到晚上12点才下载好。看着这么多好玩的游戏,哪还有心情去睡觉啊,于是悄悄关上房门玩起了游戏。
玩着玩着,就到了凌晨5点,这下完蛋了,早上8点还有课呢!!! 于是赶紧倒下去睡觉了(玩了这么久游戏哪可能说睡着就睡着啊),果然,第二天早上上网课卡迪亚睡着了,更巧的是,还被他妈妈逮了个正着,妈妈斥责道:还睡觉?你是啥都会了吗?来,给你写一道题。
题目说:一个平面中有n个点,保证点不重合,任意三点不共线,并且这n个点构成的一定是凸边形,这些点按顺时针顺序从1到n编号。现在告诉你1到n每个点的坐标(xi) (yi)。如果有两个点p1,p2,其中p1=(x1,y1),p2=(x2,y2) ,定义这两点的特殊距离
d(p1,p2)=|x1−x2|+|y1−y2|,
现在再告诉你需要在这n个点中任意选择k(k≥3)个点,请你找出k个点构成的凸边形在特殊距离公式下的最大周长,其中周长C=d(p1,p2)+d(p2,p3)+…+d(pk,p1)。
为了惩罚你,妈妈让你把所有可能的k的结果都求出来,即求出所有k在[3~n]取值时的答案C。
注意:k个点构成的一定要是凸边形,且边不能够相交,边也必须是直线。
输入描述
第一行一个整数表示点的数量n (3≤n≤3⋅1e5)
之后n行,每行两个整数,分别表示第i个点的坐标xi,yi (−1e8≤xi,yi≤1e8)
ps:点集是凸的,所有点都是不同的,点是按顺时针顺序排列的,不会有三个共线点。
输出描述
共一行,分别输出k的取值从3到n时的的每一个结果,每个数之间有一个空格,最后一个数后没有空格。
输入样例1
4
2 4
4 3
3 0
1 3
输出样例1
12 14
输入样例2
3
0 0
0 2
2 0
输出样例2
8
来源
Kadia
OP
感谢学长(大概是)的标程,拍出了自己的bug。
思路
此题中的特殊周长的定义以及凸形的限定,使得n个点构成的凸形周长即为能框住这n个点的最小矩形的周长(该矩形边平行于坐标轴)。
先讨论k>=4k>=4k>=4时的情况:
如果C5>C4C_5>C_4C5>C4,即说明C4C_4C4选择的4个点并不是周长最长的点,因为可以选择C5C_5C5时的第五个点来撑大矩形;
所以C4=C5=...=CnC_4=C_5=...=C_nC4=C5=...=Cn,即这些k的取值中,结果相同,均是框住所有点的矩形周长;(通俗来说,至少需要四个点来撑住矩形的四个边)
此时结果为2∗(Xmax−Xmin+Ymax−Ymin)2*(X_{max}-X_{min}+Y_{max}-Y_{min})2∗(Xmax−Xmin+Ymax−Ymin);
k=3k=3k=3时:
对于每一个点,有其参与的最大矩形只有四种情况:
以其为右下顶点,Ymax与Xmin为两边所在直线;
以其为左下顶点,Ymax与Xmax为两边所在直线;
以其为右上顶点,Ymin与Xmin为两边所在直线;
以其为左上顶点,Ymin与Xmax为两边所在直线;
对于每一个点遍历比较即可。
曾经的错误想法及hack数据:本想用最大矩形的一条边作为k=3时矩形的一边,再寻找另一边的可行最大长度(即结果与最大矩形等宽或等高)
hack数据如下
5
74 -44
21 86
-100 23
62 -70
36 -77
正确答案应为636 674 674
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;int main()
{int n,i;ll gx,gy,xi=1e9+1,yi=1e9+1,xm=-1e9-1,ym=-1e9-1;static ll x[300005],y[300005];cin>>n;for(i=1;i<=n;i++){scanf("%lld%lld",&gx,&gy);x[i]=gx,y[i]=gy;xi=min(xi,gx),yi=min(yi,gy),xm=max(xm,gx),ym=max(ym,gy);}//if(n==3)printf("%lld",2*(xm-xi+ym-yi));//并不需要对n==3特判//else{ll now=0;for(i=1;i<=n;i++){now=max(xm-x[i]+ym-y[i],now);now=max(x[i]-xi+ym-y[i],now);now=max(xm-x[i]+y[i]-yi,now);now=max(x[i]-xi+y[i]-yi,now);}printf("%lld",2*now);for(i=4;i<=n;i++)printf(" %lld",2*(xm-xi+ym-yi));}
}
ED
此题中输入数据的顺时针和无三点共线保证还没发现有什么具体作用,有想法的欢迎在下方讨论。
关于 熬夜的惩罚 一题的思路+代码(几何)相关推荐
- 【2023年电工杯数学建模竞赛】选题分析+A题B题完整思路+代码分享
2023年电工杯B题(附带ChatGpt思路)思路已更新,请点击一下链接 [2023年电工杯数学建模竞赛B题人工智能对大学生学习影响的评价]完整思路分析+完整代码+(附带ChatGpt思路) 1.竞赛 ...
- 2021电工杯B题建模思路代码完整版
2021电工杯B题思路和代码完整版 2021"中国电机工程学会杯"全国大学生电工数学建模竞赛B题思路代码完整版+参考文献,内容如下,可分享-
- 华为OD机试真题Python实现【 热点网络统计】真题+解题思路+代码(20222023)
热点网络统计 题目 企业路由器的统计页面,有一个功能,需要动态统计公司访问最多的网页URL topN 请设计一个算法,可以高效动态统计TopN的页面
- 华为OD机试真题Python实现【竖直四子棋】真题+解题思路+代码(20222023)
竖直四子棋 题目 竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子, 棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子. 一方的4个棋子横.竖或者斜方向连成一线时 ...
- 华为OD机试真题Java实现【5键键盘的输出】真题+解题思路+代码(20222023)
题目 有一个特殊的5键键盘,上面有a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键.a键在屏幕上输出一个字母a:ctrl-c将当前选择的字母复制到剪贴板:ctrl-x将当前选择的字母复 ...
- 华为OD机试真题Java实现【密室逃生游戏】真题+解题思路+代码(20222023)
密室逃生游戏 小强增在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子, 并给出箱子编号,箱子编号为 1~N . 每个箱子中都有一个 字符串s , ...
- 华为OD机试真题Python实现【密室逃生游戏】真题+解题思路+代码(20222023)
密室逃生游戏 题目 小强增在参加<密室逃生>游戏,当前关卡要求找到符合给定 密码 K(升序的不重复小写字母组成) 的箱子, 并给出箱子编号,箱子编号为 1~N . 每个箱子中都有一个 字符 ...
- 华为OD机试真题Java实现【得完美走位】真题+解题思路+代码(20222023)
获得完美走位 题目 在第一人称射击游戏中,玩家通过键盘的A.S.D.W四个按键控制游戏人物分别向左.向后.向右.向前进行移动,从而完成走位. 假设玩家每按动一次键盘,游戏人物会向某个方向移动一步,如果 ...
- 华为OD机试真题Java实现【射击比赛】真题+解题思路+代码(20222023)
射击比赛 题目 给定一个射击比赛成绩单 包含多个选手若干次射击的成绩分数 请对每个选手按其最高三个分数之和进行降序排名 输出降序排名后的选手ID序列 条件如下: 一个选手可以有多个射击成绩的分数 且次 ...
最新文章
- 碰疼了会躲!这个植入“迷你大脑”的AI机器人,可感知疼痛,还能自我愈合...
- 程序包不存在?无源文件?找不到文件?找不到或无法加载主类?
- 2016 大连网赛---Different GCD Subarray Query(GCD离散+树状数组)
- java 兔子生仔问题
- python bottle框架 重定向_Python的web框架bottle静态文件的路径
- 【渝粤教育】广东开放大学 刑法 形成性考核 (42)
- React开发(101):样式处理
- 大数据之-Hadoop3.x_MapReduce_MapTask源码解析---大数据之hadoop3.x工作笔记0126
- python调用v8_Python 安装 V8 引擎 – pyv8
- Win7下配置php运行环境
- android-player 本地服务器联调
- 紫川歪传------------恶搞暴笑版
- 在线微信公众号调查数据分析报告
- 关于错误 Unhandled exception in (KERNEL32.DLL):0xE06D7363:Microsoft C++ Exce vc and access insert 记录
- java maven项目导入本地jar包
- 什么是统一身份认证?
- 【记录】前端知识点 - Vue
- 笔记本电脑触控板突然失灵的解决办法
- 回调函数的注册机制为什么会在嵌入式固件开发中应用如此广泛?
- 【ROS RIKIBOT 基础--使用系列 第八章节】超声波跟随、雷达跟随、手机APP建地图、视觉单线寻线