随笔分类 - ACM---计算几何
摘要:题目:POJ2826这道题WA了无数次啊。。。惨不忍睹,到现在实在找不到错了。。T_T题目大意:两块木板,随意摆放,有雨水垂直落下到两块木板所形成的空间中,求能盛多少雨水(面积)。如图:那么能盛放的雨水便是蓝色部分的面积。看起来很简单···实际上要考虑的情况很多啊!能1A的人都是神呐!大概有以下几种要特别注意的情况:1.有其中一个木板与地面平行,输出02.两个木板平行,输出03.两个木板重合相交(平行),输出04.这个容易出错,就是当某木板挡住下面木板的时候,如图:这样也输出0.上面4种情况中第四种的判断比较麻烦,我是先确定两个木板各自靠上的顶点a,b。比较出较低
阅读全文
摘要:模拟退火(SA,Simulated Annealing)这是一种随机算法,其实模拟退火也算一种贪心算法。但是它在搜索过程中引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。顺便说一下爬山算法:爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。爬山算法的原理很简单,但是他很容易陷入进一个局部的最优解从而得不出想要的答案。这里网上有一个非常好的关于爬山算法和模拟退火算法的比喻:爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗
阅读全文
摘要:hdu 4355 Party All the Time题目:hdu4335恩,多校第六场的题,看了题解说三分最简单赶紧来看看。。果然就这样过了。不过之前做过一道三分的题目,有位大神二分也可以过,也没看懂他怎么写的。。不知道这个可不可以二分水过了。至于为什么是三分,我是感觉题目给出的函数结合题意得出的图像应该是具有凸性或凹性的,所以这里用三分比较合适吧。不过郁闷的是C++就超时,G++就AC。。唉,不管了。标程的三分那里直接写成int time=60;while(time--){ ···}感觉是水过了- -当然除了三分,题解里还说可以枚举两个端点,极值求导什么的。三
阅读全文
摘要:今天开始学习半平面交了。看了一种普通的 O(n2)的方法,恩,感觉有点麻烦。。然后又去看了朱泽园自创的排序增量算法,据说还是在高中时候发明的- -。。。(给跪了。。果然是神人)复杂度是O(nlogn),实现过程说的很详细,也比O(n2)的直观一些。然后自己照着论文的过程写了一遍,结果那叫一个惨不忍睹。各种bug,晕的要死。。感觉比之前学旋转卡壳时候还晕。。唉。。还是先看看别人怎么写的吧。
阅读全文
摘要:POJ2954----pick定理+GCD···链接:http://poj.org/problem?id=2954PICK定理,一个很重要也很方便的定理:在一个平面直角坐标系内,以整点为顶点的简单多边形(任两边不交叉),它内部整点数为a,它的边上(包括顶点)的整点数为b,则它的面积S = a+b/2-1.具体证明就不说了,也不难。。这道题再加上多边形的整点的关系什么的,反正就是用GCD求了。。面积依然直接叉积,不过要注意取绝对值。 1 //poj-2954 2 #include<iostream> 3 #include<cstdio> 4
阅读全文
摘要:好早以前看的,现在再记下来吧,当做复习一遍。那么,先提一下最基本最暴力的求凸包直径的方法吧---枚举。。。好吧。。很多问题都可以用 枚举 这个“万能”的方法来解决,过程很简单方便是肯定的,不过在效率上就要差很远了。 要求一个点集的直径,即使先计算出这个点集的凸包,然后再枚举凸包上的点对,这样来求点集直径的话依然会在凸包上点的数量达到O(n)级别是极大的降低它的效率,也浪费了凸包的优美性质。不过在数据量较小或者很适合时,何必要大费周折的用那些麻烦复杂的算法呢,枚举依然是解决问题的很好的方法之一。然后就是今天的旋转卡壳算法了。(那个字念 qia 。。。搞了好久才发现读都读错了。囧。。。)旋转卡壳可
阅读全文
摘要:题目链接:http://poj.org/problem?id=1228 这道题算是很好的一道凸包的题吧,做完后会加深对凸包的理解。 题意很关键。。。这英语看了好几遍才差不多看明白了。意思就是给你一堆点,这堆点本来就是某个凸包上的部分点,问你这堆点是否能确定唯一的凸包(大概这意思吧。。。)。后来搜了一下,发现这种凸包叫做稳定凸包。 首先来了解什么是稳定的凸包。比如有4个点:这四个点是某个凸包上的部分点,他们连起来后确实还是一个凸包。但是原始的凸包可能不是这样。比如:即这四个点构成的凸包不算做“稳定”的。我们发现,当凸包上存在一条边上的点只有端点两个点的时候,这个凸包不是稳定的,因为它可以在这条.
阅读全文
摘要:(好吧。。。第一篇blog,之前没有写的习惯,现在还是开始慢慢记录下来吧~) 所谓最近点对呢,就是平面上给你一堆点,然后求出这堆点中相距最小的距离。 假如数据量比较小的话,那肯定是枚举所有点对求出各自距离再比较更方便了。很明显,枚举的时间复杂度是O(n²)。不过一般不会给你这样的问题,点的个数往往很多,那就必然不能用枚举了。 这里要使用一种O(nlog(n))的算法。 这个算法主要思想就是分治, 算法描述:已知一个点的集合S,将S拆分成左右两部分求最近点对。首先对点集S进行排序,一般对点的X坐标从小到大排。算法每次选取一条直线(垂线)L,将S拆分成左右两部分Sl,Sr。L一般取点集S
阅读全文

浙公网安备 33010602011771号