传送门: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的最长点距的更多相关文章

  1. HTML结构标签介绍

    HTML:超文本标记语言   介绍HTML基本标记   1:头部标记(head)-----  头部的内容不会再页面上显示 在头部元素中,一般需要包括标题<title>,基本信息(文档样式, ...

  2. selenium 滚动条操作(JavaScript操作)

    前言 一般我们想到的必须使用滚动条的场景是:注册时的法律条文的阅读.判断用户是否阅读完的标准是:滚动条是否拉到页面底部.当然,有时候为使操作更接近用户行为也会使用滚动条,例如用户要操作的元素在页面的第 ...

  3. MasaFramework -- 缓存入门与规则配置

    概念 什么是缓存,在项目中,为了提高数据的读取速度,我们会对不经常变更但访问频繁的数据做缓存处理,我们常用的缓存有: 本地缓存 内存缓存:IMemoryCache 分布式缓存 Redis: Stack ...

  4. MasaFramework -- 缓存入门与设计

    概念 什么是缓存,在项目中,为了提高数据的读取速度,我们会对不经常变更但访问频繁的数据做缓存处理,我们常用的缓存有: 本地缓存 内存缓存:IMemoryCache 分布式缓存 Redis: Stack ...

  5. 【TOJ 5065】最长连续子序列(前缀和)

    Description 给定一系列非负整数,求最长的连续子序列,使其和是7的倍数. Input 第一行为正整数N(1<=N<=50000),接下来有N行,每行有一个非负整数,所有整数不大于 ...

  6. TOJ 5065: 最长连续子序列

    5065: 最长连续子序列   Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 140   ...

  7. php显示距当前多长时间

    <?php header("Content-type: text/html; charset=utf-8");date_default_timezone_set('PRC') ...

  8. [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 ...

  9. css负边距之详解

    自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史.正因为此,从那以后CSS布局成为了优雅代码的代名词. 对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功.这就 ...

随机推荐

  1. [bcc32 Error] ws2def.h(231): E2238 Multiple declaration for 'sockaddr'

    [bcc32 Error] ws2def.h(231): E2238 Multiple declaration for 'sockaddr'  Full parser context    ksrGe ...

  2. ORM一对多增加记录

    多表操作(一对多)增加记录: 1)Bookl.objects.creat(name='python', price=77, publish_id=2) 2) pulish_obj = Publish. ...

  3. python 可迭代对象与迭代器

    生成器函数的工作原理只要 Python 函数的定义体中有 yield 关键字, 该函数就是生成器函数. 调用生成器函数时, 会返回一个生成器对象. 也就是说, 生成器函数是生成器工厂. 调用生成器函数 ...

  4. Linux命令:zip

    语法: zip   [选项]   zip文件  源文件s   选项 全称 含义 举例 -r recursive 递归压缩子目录里的文件(包括子目录里的子目录) zip   -r    target.z ...

  5. 【381】python 获取列表中重复元素的索引值

    参考:获取python的list中含有重复值的index方法_python_脚本之家 核心思想:建立字典,遍历列表,把列表中每个元素和其索引添加到字典里面 cc = [1, 2, 3, 2, 4] f ...

  6. Linux性能测试分析命令_iostat

    iostat用于输出CPU和磁盘I/O相关的统计信息 iostat语法 用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]] 常用选项说明: -c:只显示系统 ...

  7. [C语言]数据类型与计算

    ------------------------------------------------------------------------------------------------- 实际 ...

  8. JAVAWEB 一一 框架整合(SSH,Spring+Struts2+Hibernate IOC/DI AOP声明式事务处理 定时任务)

    package org.springframework.orm.hibernate3; import java.io.Serializable; import java.util.List; impo ...

  9. ESET官方下载地址

    官方远程下载 ESET NOD32 Antivirus(32位) ESET NOD32 Antivirus(64位) ESET Smart Security(32位) ESET Smart Secur ...

  10. 吴裕雄 python神经网络(8)

    # -*- coding=utf-8 -*-import numpy as npimport kerasfrom keras.models import Sequentialfrom keras.la ...