【洛谷 P1452】 Beauty Contest (二维凸包,旋转卡壳)
题目链接
旋转卡壳模板题把。
有时间再补总结吧。
#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;
}
point operator - (point a, point b){
	return (point){ a.x - b.x, a.y - b.y };
}
int cmp1(const point a, const point b){
	return a.x == b.x ? a.y < b.y : a.x < b.x;
}
inline double k(point a, point b){
	return a.x == b.x ? 1e18 : ((double)b.y - a.y) / (b.x - a.x);
}
inline double dis(point a, point b){
	int px = b.x - a.x, py = b.y - a.y;
	return sqrt(px * px + py * py);
}
inline int dp(point a, point b){
	int px = b.x - a.x, py = b.y - a.y;
	return px * px + py * py;
}
int n, top, tp, ans;
point st[MAXN], ts[MAXN];
inline double mult(point a, point b, point c){
	return (a - c) * (b - c);
}
int SpecialJudge(){
	for(int i = 2; i <= n; ++i)
	   if(p[i].y != p[i - 1].y)
	     return 0;
	return 1;
}
int main(){
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i)
	   scanf("%d%d", &p[i].x, &p[i].y);
	if(SpecialJudge()){
	  int Min = 0x3f3f3f3f, Max = -0x3f3f3f3f;
	  for(int i = 1; i <= n; ++i){
	  	 Min = min(Min, p[i].x);
	  	 Max = max(Max, p[i].x);
	  }
	  printf("%d\n", (Max - Min) * (Max - Min));
	  return 0;
    }
	sort(p + 1, p + n + 1, cmp1);
	for(int i = 1; i <= n; ++i){
	   while(top > 1 && k(st[top - 1], p[i]) < k(st[top - 1], st[top])) --top;
	   st[++top] = p[i];
    }
	for(int i = 1; i <= n; ++i){
	   while(tp > 1 && k(ts[tp - 1], p[i]) > k(ts[tp - 1], ts[tp])) --tp;
	   ts[++tp] = p[i];
    }
    for(int i = tp - 1; i; --i) st[++top] = ts[i];
    int j = 2;
    for(int i = 1; i <= top; ++i){
       while(mult(st[i], st[i + 1], st[j]) < mult(st[i], st[i + 1], st[j + 1]))
       	 if(++j > top) j = 1;
       ans = max(ans, max(dp(st[i], st[j]), dp(st[i + 1], st[j])));
    }
    printf("%d\n", ans);
	return 0;
}
												
											【洛谷 P1452】 Beauty Contest (二维凸包,旋转卡壳)的更多相关文章
- poj 2187 Beauty Contest(二维凸包旋转卡壳)
		
D - Beauty Contest Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
 - poj 2079 Triangle (二维凸包旋转卡壳)
		
Triangle Time Limit: 3000MS Memory Limit: 30000KB 64bit IO Format: %I64d & %I64u Submit Stat ...
 - 洛谷 P1452 Beauty Contest 解题报告
		
P1452 Beauty Contest 题意 求平面\(n(\le 50000)\)个点的最远点对 收获了一堆计算几何的卡点.. 凸包如果不保留共线的点,在加入上凸壳时搞一个相对栈顶,以免把\(n\ ...
 - 洛谷 P1452 Beauty Contest
		
题目背景 此处省略1W字^ ^ 题目描述 贝茜在牛的选美比赛中赢得了冠军”牛世界小姐”.因此,贝西会参观N(2 < = N < = 50000)个农场来传播善意.世界将被表示成一个二维平面 ...
 - HDU 5251 矩形面积(二维凸包旋转卡壳最小矩形覆盖问题) --2015年百度之星程序设计大赛 - 初赛(1)
		
题目链接 题意:给出n个矩形,求能覆盖所有矩形的最小的矩形的面积. 题解:对所有点求凸包,然后旋转卡壳,对没一条边求该边的最左最右和最上的三个点. 利用叉积面积求高,利用点积的性质求最左右点和长度 ...
 - [洛谷P1452]Beauty Contest
		
题目大意:给你$n$个点,求出其中最远点的距离 题解:求出凸包,最远点一定都在凸包上,可以对每条边求出最远的点(可以双指针),然后求出和这条边的端点的距离,更新答案 卡点:最开始对每个点求出最远点,但 ...
 - 洛谷P4054 [JSOI2009]计数问题(二维树状数组)
		
题意 题目链接 Sol 很傻x的题.. c才100, n, m才300,直接开100个二维树状数组就做完了.. #include<bits/stdc++.h> using namespac ...
 - 【洛谷】【动态规划/二维背包】P1855 榨取kkksc03
		
[题目描述:] ... (宣传luogu2的内容被自动省略) 洛谷的运营组决定,如果...,那么他可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望. Kkks ...
 - 【洛谷】【动态规划(二维)】P1508 Likecloud-吃、吃、吃
		
[题目描述:] 正处在某一特定时期之中的李大水牛由于消化系统比较发达,最近一直处在饥饿的状态中.某日上课,正当他饿得头昏眼花之时,眼前突然闪现出了一个n*m(n and m<=200)的矩型的巨 ...
 - 洛谷  P3397 地毯 【二维差分标记】
		
题目背景 此题约为NOIP提高组Day2T1难度. 题目描述 在n*n的格子上有m个地毯. 给出这些地毯的信息,问每个点被多少个地毯覆盖. 输入输出格式 输入格式: 第一行,两个正整数n.m.意义如题 ...
 
随机推荐
- [剑指Offer] 59.按之字形顺序打印二叉树
			
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. [思路]先按层次遍历存入,通过设立标志位,将 ...
 - BZOJ4710 JSOI2011分特产(容斥原理+组合数学)
			
显然可以容斥去掉每人都不为空的限制.每种物品分配方式独立,各自算一个可重组合乘起来即可. #include<iostream> #include<cstdio> #includ ...
 - 【刷题】BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式
			
Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". ...
 - Android 自定义View消除锯齿实现图片旋转,添加边框及文字说明
			
先看看图片的效果,左边是原图,右边是旋转之后的图: 之所以把这个写出来是因为在一个项目中需要用到这样的效果,我试过用FrameLayout布局如上的画面,然后旋转FrameLayout,随之而来也 ...
 - CF633C:Spy Syndrome 2——题解
			
https://vjudge.net/problem/CodeForces-633C http://codeforces.com/problemset/problem/633/C 点击这里看巨佬题解 ...
 - ES6 Set,WeakSet,Map,WeakMap
			
1. Set Set是一个集合,里面的值都是唯一的,没有重复的.Set中可以是任何数据类型,并且添加数据时会进行严格比较,重复数据无法加入. 2. WeakSet 弱引用Set.只能存储对象,不能存储 ...
 - requireJs使用方法项目实例
			
首先,定义 main.js 和 事件处理的公共 js main.js 主要是定义引用名称和路径的对应关系 事件绑定模块: 写jsp页面: jsp中先引入 require.js 和 main.js 然 ...
 - 题解【luogu4168 [Violet]蒲公英】
			
Description 给出一个长度为 \(n\) 序列 \(a\) ,\(m\) 次询问,每次询问区间 \([l,r]\) 里的众数(出现次数最多的数).若有多个,输出最小的. \(a_i \leq ...
 - HDU2688 树状数组(逆序数)
			
Rotate Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
 - FreeRTOS - 调度器
			
原文地址:http://www.cnblogs.com/god-of-death/p/6942641.html 绝大多数情况下,调度器的配置如下: 下面的说明基于上面的调度器配置: 如果有更高优先级的 ...