题目链接:点击查看

题目大意:给出四个点,问最少移动多少步,可以使得四个点围成的矩形是正方形(这里的正方形允许退化成点)

题目分析:比赛时写了个三分,然鹅又双叒叕不知道哪里写崩了,还是太鶸了呀

首先对于四个点全排列,枚举每个点分别属于正方形的哪个位置,方便起见我设:p[ 0 ] 是左上角,p[ 1 ] 是右上角,p[ 2 ] 是左下角,p[ 3 ] 是右下角

不难看出 x 坐标与 y 坐标是相互独立的,所以这里只讨论如何求解最优的 x,关于 y 的话类比过去就好了

对于最终的正方形来说,p[ 0 ] 和 p[ 2 ] 的 x 坐标最终一定是相等的,同理 p[ 1 ] 和 p[ 3 ] 的 x 坐标也一定是相等的,我们将最终相等的两个 x 坐标分别记为 x1 和 x2

所以具象化一下最终的距离公式为:

不难看出,如果满足 时,p[ 0 ] 和 p[ 2 ] 的贡献最小,为 ,对于 x2 同理

所以正方形上下两条平行于 x 轴的边的长度为 ,其取值范围根据 x1 和 x2 的定义域也不难推出

同理求出 ,注意,这两个绝对值对应的分别是正方形边长的取值范围,然后分两种情况讨论一下:

  1. 如果存在交集的话,那么一定存在着一种取值作为正方形的边长,使得答案为
  2. 如果不存在交集的话,那么需要使中的一个不在“贡献最小”的范围内,针对于 x 讨论一下,如果离开这个最优范围 1 个单位,会对答案多贡献 2 个单位(因为每条边需要有两个点与其对齐)

剩下的封装一下函数然后按照顺序实现下来就好了

代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const LL inf=0x3f3f3f3f3f3f3f3f;const int N=1e6+100;struct Node
{LL x,y;void input(){scanf("%lld%lld",&x,&y);}
}p[4];int id[4];pair<LL,LL>get_seg(LL a,LL b)
{return make_pair(min(a,b),max(a,b));
}pair<LL,LL>get_interval(pair<LL,LL>a,pair<LL,LL>b)
{return make_pair(max({0LL,a.first-b.second,b.first-a.second}),max({0LL,b.second-a.first,a.second-b.first}));
}LL get_len(pair<LL,LL>a)
{return a.second-a.first;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.ans.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){for(int i=0;i<4;i++){p[i].input();id[i]=i;}
//      01
//      23LL ans=inf;do{LL cur=0;auto x1=get_seg(p[id[0]].x,p[id[2]].x);auto x2=get_seg(p[id[1]].x,p[id[3]].x);auto Seg_x=get_interval(x1,x2);cur+=get_len(x1)+get_len(x2);auto y1=get_seg(p[id[0]].y,p[id[1]].y);auto y2=get_seg(p[id[2]].y,p[id[3]].y);auto Seg_y=get_interval(y1,y2);cur+=get_len(y1)+get_len(y2);LL delta=max(max(Seg_x.first,Seg_y.first)-min(Seg_x.second,Seg_y.second),0LL);cur+=2*delta;ans=min(ans,cur);}while(next_permutation(id,id+4));printf("%lld\n",ans);}return 0;
}

CodeForces - 1455E Four Points(数学+几何)相关推荐

  1. 1455E Four Points(思维+全排列)

    1455E Four Points(思维+全排列) Educational Codeforces Round 99 (Rated for Div. 2) E. Four Points 题面:Four ...

  2. 初中数学几何问题知识思维导图汇总版

    几何,就是研究空间结构及性质的一门学科.它是数学中最基本的研究内容之一,几何学发展历史悠长,内容丰富.它和代数.分析.数论等等关系极其密切.几何思想是数学中最重要的一类思想.进入初中后,中学生开始接触 ...

  3. 几何画板手机版_数学几何画板手机版

    数学几何画板手机版是一款手机上的几何图形画板服务软件,能够帮助用户在这里随时输入公式和数值,进行计算,并且可以进行几何图形立体化,使用方法简单,能够随时进行旋转拖动,使用方法简单,专为学生用户设计的, ...

  4. 能否构成三角形的条件代码_初中数学几何题汇编 三角形

    初中数学几何题汇编 三角形 知识考点: 理解三角形三边的关系及三角形的主要线段(中线.高线.角平分线)和三角形的内角和定理.关键是正确理解有关概念,学会概念和定理的运用.应用方程知识求解几何题是这部分 ...

  5. CodeForces - 1551E Fixed Points(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,需要求出删掉最少的数字,使得剩下的数字至少有 kkk 个位置满足 a[i]=ia[i]=ia[i]=i 成立 题目分析:看完数据范围不难想 ...

  6. 一些数学几何知识和小技巧

    发现自己几何sb,还是总结一下 已知三点求圆心,但三点不能共线 Point Getcir(Point A,Point B,Point C){//给予三个点,求圆心.double a = 2*(B.x ...

  7. 初中数学最全几何模型_初中数学几何九大模型,看见的不能错过,收藏后考试必备...

    初中学业水平考试(The Academic Test For The Junior High School Students),简称"中考".是检测初中在校生是否达到初中学业水平的 ...

  8. Codeforces1600数学day5[找规律CodeForces - 1059C,贪心数学A - Banh-mi CodeForces - 1062C ]

    A - Banh-mi CodeForces - 1062C 题目大意:就是开始给你一个01序列,和q次询问,每次询问会给你一个区间,每次你会从这个区间内拿出一个数,在区间内的其他未被拿走的数字会加上 ...

  9. Codeforces 1036E. Covered Points

    又一次写起了几何.... 特殊处理在于有可能出现多条线段交于一点的情况,每次考虑时,对每条线段与其他所有线段的交点存在一个set里,对每一个set,每次删除set.size()即可 重点在于判断两条线 ...

最新文章

  1. oracle x6-2能装2008吗,Sun服务器电源Oracle Server X6-2原装拆机7079395 600 AC
  2. 计算机考试函数应用题及答案,计算机等级考试题库,二级C++试题及答案
  3. 强化学习(二)---强化学习介绍
  4. 准确率 召回率_机器学习tips(四):精确率(precision)和召回率(recall)
  5. 海贼王热血航线正在连接服务器,航海王热血航线连接服务器失败?解决方法一览...
  6. C++,Java编程中 标识符 常见命名约定
  7. 前端学习(2750):global全局外观设置
  8. 剑指Offer——面试题30:最小的K个数
  9. mysql判断范围0到10 11到20_SQL 如何查询日期在一定范围内的数据
  10. V-5-4 配置Horizon View Server
  11. winform 报表的基本使用
  12. pandas获取符合条件值的索引
  13. java setmodal 不管用_java – 无法动态设置setVisibility()参数
  14. 基于SSM框架实现的房屋租赁管理系统
  15. 小技巧(1):Ububtu18.04中.z01 .z02 .z03此类拆分后压缩文件解压缩办法(以及常用解分卷压缩方法)
  16. 关于Palantir—第四部分:Palantir应用程序
  17. 全息投影是计算机技术吗,3D全息投影技术怎么应用在展厅的?
  18. 002--软考程序员之硬件组成原理
  19. window10快捷键
  20. 基于均值调整的自适应局部伽玛校正 Cython

热门文章

  1. 数码显示实验报告C语言,数码问题C语言A星算法详细实验报告含代码(9页)-原创力文档...
  2. zookeeper的设计猜想-Leader角色
  3. 完成AOP 顶层设计-CglibAopProxy
  4. 消费者广播模式和负载均衡模式
  5. JWT令牌创建和解析讲解
  6. 微服务发现组件Eureka:微服务注册
  7. 三种实现分布式解决方案原理分析
  8. 禁用Zuul的过滤器
  9. Ribbon-1 Ribbon的基本使用
  10. SocketIO-nio