【poj2187】 Beauty Contest】的更多相关文章

http://poj.org/problem?id=2187 (题目链接) 题意 求点集上两点间最长距离 Solution 凸包+旋转卡壳. 旋转卡壳是看起来很难,但是很好意会也很好实现的算法,但是要真正的搞懂搞透还是有点难度,有篇博客写得很好,也就不再赘述了. 代码 // poj2187 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include&l…
计算几何/旋转卡壳 学习旋转卡壳请戳这里~感觉讲的最好的就是这个了…… 其实就是找面积最大的三角形?...并且满足单调…… 嗯反正就是这样…… 这是一道模板题 好像必须写成循环访问?我在原数组后面复制了一遍点,结果挂了……改成cur=cur%n+1就过了QAQ //其实是不是数组没开够所以复制的方法就爆了? UPD:(2015年5月13日 20:40:45) 其实是我点保存在1~n里面,所以复制的时候不能写p[i+n-1]=p[i]; 而应该是p[i+n]=p[i];……QAQ我是傻逼 Sour…
xuán zhuǎn qiǎ ké模板题 是这么读吧(≖ ‿ ≖)✧ 算法挺简单:找对踵点即可,顺便更新答案. #include<cstdio> #include<cstring> #include<algorithm> #define read(x) x=getint() #define max(a,b) (a)>(b)?(a):(b) #define N 50003 using namespace std; inline int getint() { int…
给定点集的最远两点的距离. 先用graham求凸包.旋(xuán)转(zhuàn)卡(qiǎ)壳(ké)求凸包直径. ps:旋转卡壳算法的典型运用 http://blog.csdn.net/hanchengxi/article/details/8639476. #include <cstdio> #include <cmath> #include <algorithm> #define sqr(x) (x)*(x) #define N 50001 using names…
题目链接 旋转卡壳模板题把. 有时间再补总结吧. #include <cstdio> #include <cmath> #include <algorithm> using namespace std; const int MAXN = 100010; struct point{ int x, y; }p[MAXN]; int operator * (point a, point b){ // a x b return a.x * b.y - b.x * a.y; }…
题目简述 输入n个点,及其坐标,n<=50000,所有坐标都是不超过10000的整数组成,没有重点. 问最远点对间的距离的平方是多少 题解 这是一道旋转卡壳的裸题 我们要求这个多边形的直径,这可怎么办呢 首先,最远点对一定在凸包上,我们考虑这样一个凸包 显然的,卡在两个点上,一定可以转化成卡在一个边和一个点上 更显然的,如果卡在一条边上和一个点上,那么这个点一定离这个边最远 那么,这个点和这条边组成的三角形一定是包括这条边的三角形中最大的 再之,假定点i和点i+1卡到了点j 那么随着i增加,j也…
题解 我写的斜率维护,放弃了我最擅长的叉积维护,然后发现叉积维护也不会爆long long哦-- 一写斜率维护我的代码就会莫名变长而且难写--行吧 我们看这题 推了推式子,发现这是个斜率的式子,但是斜率单增还要求最大值?啥我又得二分凸包--好烦-- 然后我们求一个pre[x]表示[1,x]的最大分数,和一个suf[x]表示[x,N]里的最大分数 然后对于一个点枚举一个包含它的区间,计算取值 显然超时 那就放在分治上,左端点在左区间,右端点在右区间,把最大值处理成前后缀max,两边都是斜率优化 挺…
http://poj.org/problem?id=2187 题目大意:给n个点,求点对最大距离的平方. ———————————————————— 很容易证明最大距离的点对在最大凸包上. 那么就是旋转卡壳的裸题了. 旋转卡壳要不要写讲解呢…… #include<cstdio> #include<queue> #include<cctype> #include<cstring> #include<stack> #include<cmath&g…
题意:给定三个序列abc,问最少操作几次使得满足a<b<c 题解:将三个序列合并起来,设cnt[i][1/2/3]表示前i个数有几个是来自序列1/2/3的. 枚举第一个序列要到i,此时对于第一个序列的操作次数就是cnt[i][2]+cnt[i][3]+cnt[n][1]-cnt[i][1] 对于第二个序列,暴力枚举要到j,此时的操作次数就是cnt[j][3]-cnt[i][3]+cnt[n][2]-cnt[j][2] 将两个加起来就是答案,求出最小的那个 显然这样做是O(n^2)的,考虑优化…
[3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring (2019年1月22日,复习) [6]ZigZag Conversion (2019年1月22日,复习) [8]String to Integer (atoi) (2019年1月22日,复习) [10]Regular Expression Matching (2019年1月22日,复习) [12]In…