文章目录

  • [SPOJ - Closest Triplet【最小周长三角形】](https://vjudge.ppsucxtt.cn/problem/SPOJ-CLOSEST)
  • [[codeforces] - [School Regional Team Contest, Saratov, 2011]-Minimum Sum【最小向量和】](https://codeforces.com/contest/120/problem/J)
  • [codeforces429D - Tricky Function](https://codeforces.com/contest/429/problem/D)

SPOJ - Closest Triplet【最小周长三角形】

题意:以给定的 nnn 个点中的3个点组成三角形,求最小周长。

这道题写的挺顺的。

思路:

  • 要往最短欧氏距离的方面想。之前的最短点对是最短二元组,这道题是最短三元组。

  • 分治,最优解的点要么全在左或全在右,要么左右都有。

  • 那么从mid向左右拓展宽度为多少呢?我们知道三元组的周长为d的话,边的最大值为d/2。那么向左或向右拓展宽度为d/2,B点集宽度为d。

  • 获得B点集后,对于每个j点,要向上拓展多高呢?同理,也是d/2。我们对于每个j就得到了一个长乘宽=d*(d/2)的矩形,枚举即可。

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;const int N=1e6+10;
typedef long long LL;
const double inf = 1e18;struct point{double x, y;
}P[N];
bool cmp_x(point a, point b){if(a.x != b.x) return a.x < b.x;return a.y < b.y;
}
bool cmp_y(int a, int b){return P[a].y < P[b].y;
}double get_dis(int a, int b) { return sqrt((P[a].x - P[b].x) * (P[a].x - P[b].x) + (P[a].y - P[b].y) * (P[a].y - P[b].y)); }int tmp[N];
int pos;
double closest_pair(int l, int r)
{if(l == r - 1) return inf;if(l == r - 2) { return get_dis(l, l + 1) + get_dis(l, l + 2) + get_dis(l + 1, l + 2); }int mid = l + r >> 1;double res = min(closest_pair(l, mid), closest_pair(mid + 1, r));pos = 0;for(int i=l; i<=r; i++)if(fabs(P[i].x - P[mid].x) < res / 2) tmp[pos++] = i;sort(tmp, tmp + pos, cmp_y);for(int i=0; i<pos; i++)for(int j=i + 1; j<pos && fabs(P[tmp[i]].y - P[tmp[j]].y) < res / 2; j++)for(int k=j + 1; k<pos && fabs(P[tmp[i]].y - P[tmp[k]].y) < res / 2; k++)res = min(res, get_dis(tmp[i], tmp[j]) + get_dis(tmp[i], tmp[k]) + get_dis(tmp[j], tmp[k]));return res;
}int main()
{int n;while(scanf("%d", &n) && n != -1){for(int i=0; i<n; i++) scanf("%lf %lf", &P[i].x, &P[i].y);sort(P, P + n, cmp_x);printf("%.3f\n", closest_pair(0, n - 1));}system("pause");return 0;
}

[codeforces] - [School Regional Team Contest, Saratov, 2011]-Minimum Sum【最小向量和】

题解:Codeforces 120J Minimum Sum

思路:向量和 转换成 两点间的距离。把每个点的四种状态都塞到一起,算最近点对。记得要防止一个点的不同状态互相匹配。

算距离的话可以用整形存,最后再开方,防止精度问题。懒得改了。

AC代码(记得交C++17):

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;const int N=4e5+10;
typedef long long LL;
const double inf = 1e9;struct point{int x, y, id, type;
}P[N * 4];
bool cmp_x(const point a, const point b) {if(a.x != b.x) return a.x < b.x;return a.y < b.y;
}
bool cmp_y(const int a, const int b) {return P[a].y < P[b].y;
}double ans = inf;
point ansa, ansb;
void get_dis(int a, int b){double dis = sqrt((P[a].x - P[b].x) * (P[a].x - P[b].x) + (P[a].y - P[b].y) * (P[a].y - P[b].y));if(dis < ans) ans = dis, ansa = P[a], ansb = P[b];
}int tmp[N * 4];
int pos;void closest_pair(int l, int r)
{if(l == r) return ;if(l == r - 1) { if(P[l].id != P[r].id) get_dis(l, r); return ; }int mid = l + r >> 1;closest_pair(l, mid); closest_pair(mid + 1, r);pos = 0;for(int i=l; i<=r; i++)if(fabs(P[mid].x * 1.0 - P[i].x) < ans) tmp[pos++] = i;sort(tmp, tmp + pos, cmp_y);for(int i=0; i<pos; i++)for(int j=i + 1; j<pos && fabs(P[tmp[i]].y * 1.0 - P[tmp[j]].y) < ans; j++)if(P[tmp[i]].id != P[tmp[j]].id)get_dis(tmp[i], tmp[j]);
}int main()
{int n; scanf("%d", &n);int x, y;for(int i=0; i<n; i++){scanf("%d %d", &x, &y);P[i * 4] = {x, y, i + 1, 1};P[i * 4 + 1] = {-x, y, i + 1, 2};P[i * 4 + 2] = {x, -y, i + 1, 3};P[i * 4 + 3] = {-x, -y, i + 1 ,4};}sort(P, P + n * 4, cmp_x);closest_pair(0, 4 * n - 1);ansb.type = 5 - ansb.type;printf("%d %d %d %d", ansa.id, ansa.type, ansb.id, ansb.type);system("pause");return 0;
}

codeforces429D - Tricky Function

题意:https://vjudge.ppsucxtt.cn/problem/CodeForces-429D#author=yang198866

题解:CF429D Tricky Function(求解公式、经分析转为求平面最近点对、思维)

思路:

AC代码:https://codeforces.com/contest/429/submission/128948414

【计几】平面最短欧氏距离点对题集相关推荐

  1. 计算机原理课堂,计算机原理课堂测验题集.ppt

    计算机原理课堂测验题集.ppt (31页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 <计算机组成原理>课堂测验题(1)F1○ ...

  2. 码题集新手村600道(前300道)

    码题集新手村600道[不含vip] 刷题链接 MT1001 MT1002 MT1003 MT1006 MT1007 MT1008 MT1009 MT1010 MT1011 MT1012 MT1013 ...

  3. 操作系统知识点总结和题集大杂烩

    第一轮:从当前位置开始扫描到第一个(A =0, M = 0)的帧用于替换.表示该页面最近既未被访问,又未被修改,是最佳淘汰页 第二轮:若第一轮扫描失败,则重新扫描,查找第一个(A =0, M = 1) ...

  4. 计算错题集(有错误就加入错题集,持续更新)

    VASP计算错题集   万事开头难,学习第一性原理计算的一年中碰到了很多让我困惑的问题,在这里总结整理出来(随时更新),防止师弟师妹们陷入困惑,真的很让人头大,并且超级费时间,希望能帮助避雷!如果师弟 ...

  5. 2020-07算法刷题集

    2020-07算法刷题集 前言 0715-一年中的第几天 0716-分数加减运算 0717-移动石子直到连续 0719-拼写单词 0720-有效的回旋镖 0722-最后一块石头的重量 0723-有效三 ...

  6. 搞来一套大厂内部资料(内含C++面试真题集)

    面试最让人糟心的是什么? 提前准备好的问题发挥不上. 临时想好的回答却支支吾吾说不到重点, 结果那自然是: 网上搜别人的面经,看了也用不上,大家履历到底还是差太多: 搜面试真题,会开放的都是一些无名小 ...

  7. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  8. 严蔚敏版《数据结构 (C语言版)》和《数据结构题集》(一)

    这里用的是严蔚敏版<数据结构 (C语言版)>和<数据结构题集>,深感自己的代码写得又渣又无力,打算把这本书好好琢磨透彻,里面的算法和模板都实现一遍,题目也都做一遍.最终能够做到 ...

  9. C语言易错题集 第四部

    C语言易错题集 第四部 一.位操作相关 二.switch()相关 三.输出相关 四.实数相关 五.指针&a相关 六.指针访问数组元素相关 七.转义字符相关 八.类型提升问题 九.是不是正确的浮 ...

  10. C语言易错题集 第二部

    C语言易错题集后续 一.共用体相关(union) 二.do,while相关 三.char溢出相关 四.printf()相关 五.++相关 六. for语句相关 七.calloc()相关 八.defin ...

最新文章

  1. 10个小窍门,让你轻松准确搜索。
  2. 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列
  3. hadoop 9000端口的服务未启动_IDEA 微服务单项目多端口启动
  4. 【ArrayList:键盘录入多个数据,以 0 结束,并在控制台输出最大值】
  5. 【Verilog HDL】第四章 模块的端口连接规则——污水处理模型
  6. ByteArrayOutputStream和ByteArrayInputStream的简单使用
  7. 业务中台建设与应用_中心牵头建设公司数据中台数据标签库和客户关系图谱库试点应用正式上线...
  8. 英伟达RTX 2080 Ti值得买么?深度学习测试来了!
  9. 判断数组中是否包含某一项 indexof 重复的判断不准_「JavaScript」: 老生常谈,数组类型...
  10. VS生成dump文件和调试dump文件
  11. 超声波传感器闪光|乐高EV3教学
  12. 六级词汇总结( 整理自己的大学时候的资料发现的好东东!!~~)
  13. 用java实践了下Bingo游戏的玩法
  14. 区块链和AI的比武,谁将登上黑科技这一宝座
  15. DVB-S/S2天线及信号相关知识
  16. 诺基亚财报遭吐槽:被微软收购比摩托罗拉还蠢
  17. C语言基础入门——打印“hello word“
  18. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)
  19. 【病毒】【CPU使用率为100%】Linux 被 kdevtmpfsi 挖矿病毒入侵
  20. Symbian S60v5 编程中的程序图标更换问题

热门文章

  1. cookie安全性问题
  2. 冰封王座笑话:各英雄临死前说的话
  3. Pull request 团队合作开发使用详解
  4. ftp指令及响应代码 (不能说一个不剩,只能说超详细)
  5. html顺势正旋转360度,庞明:混元太极揉球
  6. 【饭谈】那些看似为公司着想,实际却很自私的故事 (一:造轮子)
  7. vue 下载Excel 文件
  8. 计算机培训后的感言,计算机中级培训感言
  9. vue调用手机扫描二维码
  10. java基于SSM的疫情物业系统源码