TOJ 3589 likaer的最长点距
传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3589
时间限制(普通/Jav a):7000MS/70000MS 内存限制:65536KByte
描述
我们都知道,炉子喜欢做题,尤其喜欢做likaer等牛出的神题。比如昨天炉子经过一天的奋斗,终于找到一个O(N ^ 2)的算法,成功水过了likaer牛出的最长点距(http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3580)。
likaer牛深感压力很大――“这样的题都需要花一天……”,于是就给把N改成了50000,“接着做吧孩子。”
我们都知道炉子喜欢问问题――因为他什么都不会。所以炉子找到了你,一个强大的ACMer,来帮他解决这个问题。
输入
输入的第一行是样例数T,1 ≤ T ≤ 50。
每组样例第一行有一个整数N,是点的个数,1 ≤ N ≤ 50,000;
接下来有N行,每行两个整数Xi、Yi,是第i个点的X、Y坐标,-10,000 ≤ Xi ≤ 10,000,-10,000 ≤ Yi ≤ 10,000。
输出
每组样例输出一行,包含一个整数X,是最远的两个点的距离的平方(请注意不是距离而是距离的平方――这样可以避免使用double。)。
样例输入
1
3
0 0
1 1
2 2
样例输出
8
思路:因为n特别大,所以不能用暴力两个for循环遍历所有点找最远两个点。
考虑到最远点肯定在凸包上,所以转化为在先求凸包,再在凸包上循环2次暴力找最远点,这样就不会超时了
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<set>
#include <sstream>
#include <assert.h>
#define LL long long
using namespace std;
int i,j,k,n,top,ans;
struct note{
int x,y;
}p[],stack[];
int dis(note a,note b){
return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);
}
int mult(note p1,note p2,note p0){
return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);
}
int cmp(note a,note b){
if(mult(a,b,p[]) > ){
return ;
}
else if(mult(a,b,p[]) == && (dis(a,p[]) < dis(b,p[]))){
return ;
}
return ;
}
void solve(){
k = ;
for(i = ; i < n ; i++){
if(p[k].y > p[i].y || (p[k].y == p[i].y) && p[k].x > p[i].x)
k = i;
}
swap(p[],p[k]);
sort(p+,p+n,cmp);
top = ;
stack[] = p[];
stack[] = p[];
stack[] = p[];
for(i = ;i < n ; i++){
while(top > &&mult(p[i],stack[top],stack[top - ]) >= )top--;
stack[++top] = p[i];
}
}
int main(){
int t;
for(scanf("%d",&t);t--;){
scanf("%d",&n);
for(i = ; i < n ; i++){
scanf("%d %d",&p[i].x,&p[i].y);
}
solve();
ans = -;
for(i = ; i <= top ; i++){
for(j = i+ ;j <= top ; j++){
if(ans < dis(stack[i],stack[j])){
ans = dis(stack[i],stack[j]);
}
}
}
printf("%d\n",ans);
}
return ;
}
TOJ 3589 likaer的最长点距的更多相关文章
- HTML结构标签介绍
HTML:超文本标记语言 介绍HTML基本标记 1:头部标记(head)----- 头部的内容不会再页面上显示 在头部元素中,一般需要包括标题<title>,基本信息(文档样式, ...
- selenium 滚动条操作(JavaScript操作)
前言 一般我们想到的必须使用滚动条的场景是:注册时的法律条文的阅读.判断用户是否阅读完的标准是:滚动条是否拉到页面底部.当然,有时候为使操作更接近用户行为也会使用滚动条,例如用户要操作的元素在页面的第 ...
- MasaFramework -- 缓存入门与规则配置
概念 什么是缓存,在项目中,为了提高数据的读取速度,我们会对不经常变更但访问频繁的数据做缓存处理,我们常用的缓存有: 本地缓存 内存缓存:IMemoryCache 分布式缓存 Redis: Stack ...
- MasaFramework -- 缓存入门与设计
概念 什么是缓存,在项目中,为了提高数据的读取速度,我们会对不经常变更但访问频繁的数据做缓存处理,我们常用的缓存有: 本地缓存 内存缓存:IMemoryCache 分布式缓存 Redis: Stack ...
- 【TOJ 5065】最长连续子序列(前缀和)
Description 给定一系列非负整数,求最长的连续子序列,使其和是7的倍数. Input 第一行为正整数N(1<=N<=50000),接下来有N行,每行有一个非负整数,所有整数不大于 ...
- TOJ 5065: 最长连续子序列
5065: 最长连续子序列 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 140 ...
- php显示距当前多长时间
<?php header("Content-type: text/html; charset=utf-8");date_default_timezone_set('PRC') ...
- [LeetCode] Longest Increasing Path in a Matrix 矩阵中的最长递增路径
Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...
- css负边距之详解
自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史.正因为此,从那以后CSS布局成为了优雅代码的代名词. 对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功.这就 ...
随机推荐
- chrome也可以整张网页截图,保存完整网页为图片
转自:http://www.webkaka.com/blog/archives/chrome-save-a-webpage.html 关于浏览器截图,一直以为Chrome无能为力,最近发现,原来Chr ...
- HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现
HashMap:底层是一个数组+链表实现 LinkedHashMap:底层是Hash表和链表的实现 ConcurrentHashMap:基于双数组和链表的Map接口的同步实现 ArrayList:底层 ...
- MVC模式的原理
说说MVC模式的原理,Android SDK 中有哪些组件使用到了MVC模式,其基本原理是什么?[国内某著名软件外包公司 2010 年面试题] 答案:MVC 的基本原理就是通过Controller 连 ...
- curl 超时设置<转>
PHP cURL 的超时设置有两个 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT,他们的区别是: CURLOPT_CONNECTTIMEOUT 用来告诉 PHP 在 ...
- css样式表2
<head> <style type="text/css"> .main { height:42px; width:100%; text-align:cen ...
- Java——如何创建文件夹及文件,删除文件,文件夹
package com.zz; import java.io.File; import java.io.IOException; /** * Java创建文件夹 */ public class Cre ...
- html 自定义属性的获取和应用
在html 中,我们可以给元素设置自定义属性,格式: data-属性="属性值",可以设置一个,也可以设置多个 1.获取元素属性的常规方法:直接获取元素,然后使用getAttri ...
- Haskell语言学习笔记(83)Pipes
安装 pipes $ cabal install pipes Installed pipes-4.3.9 Prelude> import Pipes Prelude Pipes> impo ...
- Delphi接口的底层实现
引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的:对于服务端的类来说,如果它想实现某种服务,实现与该服务相 ...
- Hibernate 再接触 树状结构设计以及学生课程成绩表的设计
1 树状结构的设计 package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax. ...