uva-10245-分治】的更多相关文章

题意,给出n个点的坐标,找出两点间最近的距离,如果小于10000就输出INFINITY. 纯暴力是会超时的,所以得另辟蹊径,用分治算法. 递归思路将点按坐标排序后,分成两块处理,最近的距离不是在两块中的一块中,就会存在于跨越中线的点对中. 查找跨越中线的点比较麻烦,之前已经求出两块中的最小距离,只要在x范围在[m-d,m+d]的点中找对,更新最小距离,最后返回最小距离即可. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * Blog: http:…
题目链接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=21269 题意: 求平面最近点对. 分析: 经典问题. n比较大,直接枚举不可. 与上一道的树分治类似,我们也可以将点按照x坐标分成两类. 假设把所有点按照x坐标分成两类,那么有如下两种情况: 点p,q同属于左半边 点p,q一个属于左边一个属于右边 同样,对于第一种情况我们采用递归即可求解. 对于第二种情况,由于已经知道第一种情况下的最小距离d,所以我们只需…
题意:给定 n 个点,求最近两个点的距离. 析:直接求肯定要超时的,利用分治法,先把点分成两大类,答案要么在左边,要么在右边,要么一个点在左边一个点在右边,然后在左边或右边的好求,那么对于一个在左边一个在右边的,我们可以先求全在左边或右边的最小值,假设是d,那么一个点在左边,一个点在右边,那么横坐标之差肯定小于d,才能替换d,同样的纵坐标也是,并且这样的点并不多,然后就可以先选出来,再枚举. 代码如下: #pragma comment(linker, "/STACK:1024000000,102…
Problem JThe Closest Pair ProblemInput: standard inputOutput: standard outputTime Limit: 8 secondsMemory Limit: 32 MB Given a set of points in a two dimensional space, you will have to find the distance between the closest two points. Input The input…
预处理一下每个元素左边和右边最近的相邻元素. 对于一个区间[l, r]和区间内某一个元素,这个元素在这个区间唯一当且仅当左右两边最近的相邻元素不在这个区间内.这样就可以O(1)完成查询. 首先查找整个字符串是否有唯一元素,如果没有则整个序列是无聊的. 有的话,假设这个唯一元素下标是p,那么如果子序列[0, p-1]和[p+1, n-1]是不无聊的,那么这个序列就是不无聊的. 关于查找的话,如果只从一端查找唯一元素,最坏的情况就是O(n).所以可以从两端进行查找,总的时间复杂度是O(nlogn).…
题意:求任意两点之间的距离的最少一个距离 思路:枚举一下就可以了 #include <iostream> #include<cstdio> #include<cmath> using namespace std; #define N 10010 struct node{ double x,y; }p[N]; int main(int argc, char** argv) { int n,i,j; double mdist,tmp; while(scanf("%…
分治法的典例 当练手了 奇妙的是.使用inplace_merge按说应该是O(n)的算法.可是用sort nlogn的算法反而更快 先上快排版 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> using namespace std; const int SIZE = 10000+10; const doub…
虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=40741#overview 1. A UVA 10602 Editor Nottoobad 好像是俄罗斯NOI的题目,题意是给定n个字符串,然后重新安排字符串的顺序,使得最后需要打的字母总数最少.当前单词和前一个单词相同的前面部分可以不用打, 只需打…
CDQ分治入门 简介 CDQ分治是一种特别的分治方法,它由CDQ(陈丹琦)神犇于09国家集训队作业中首次提出,因此得名.CDQ分治属于分治的一种.它一般只能处理非强制在线的问题,除此之外这个算法作为某些复杂算法的替代品几乎是没有缺点的. 深入 对于一个数据结构题而言(或者需要运用数据结构的地方),我们无非就是做两件操作,一是修改,二是查询. 对于修改而言,有插入,删除,变更(其实等价于删除再插入)这几种方式. 那么查询的本质是什么呢?我们思考所遇到过的数据结构题,可以发现查询实际上就在做一件事情…
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3141 题意 一个1到n的排列,每次随机删除一个,问删除前的逆序数 思路 综合考虑,对每个数点,令value为值,pos为位置,time为出现时间(总时间-消失时间),明显是统计value1 > value2, pos1 < pos2, time1 < time2的个…