zoukankan      html  css  js  c++  java
  • 山东理工大学第七届ACM校赛-G 飞花的传送门

                              G - 飞花的传送门

    飞花壕最近手头比较宽裕,所以想买两个传送门来代步(夏天太热,实在是懒得走路)。平面上有N个传送门,飞花壕想要挑两个距离最远的传送门带回家(距离为欧几里得距离,即两点之间直线距离)。

    请你帮他算一算他所挑选的最远的两个传送门有多远。

    Input

     

    多组输入。

    对于每组输入,第一行输入一个整数N2 <= N<= 50000),接下来从第2行到第N+1行,每行两个整数(XiYi),代表第i个传送门的坐标(-1000000 <= X, Y<= 1000000)。

    数据为随机生成。

    Output

     

    输出一个整数,代表飞花壕要挑选的两个传送门的距离的平方。

    Sample Input

    4
    0 0
    0 1
    1 1
    1 0

    Sample Output

    2
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<stack>
     6 #include <math.h>
     7 #include <stdio.h>
     8 #include <algorithm>
     9 using namespace std;
    10 struct point
    11 {
    12     long long  x;
    13     long long  y;
    14 } P[50005],S[50005];
    15 
    16 long long  xx;
    17 long long  yy;
    18 
    19 bool cmp(struct point a,struct point b)
    20 {
    21     if(atan2(a.y-yy,a.x-xx)!=atan2(b.y-yy,b.x-xx))
    22         return (atan2(a.y-yy,a.x-xx))<(atan2(b.y-yy,b.x-xx));
    23     return a.x<b.x;
    24 }
    25 
    26 long long  CJ(long long  x1,long long  y1,long long  x2,long long  y2)
    27 {
    28     return (x1*y2-x2*y1);
    29 }
    30 
    31 long long Compare(struct point a,struct point b,struct point c)
    32 {
    33     return CJ((b.x-a.x),(b.y-a.y),(c.x-a.x),(c.y-a.y));
    34 }
    35 
    36 long long Dis(struct point a,struct point b)
    37 {
    38     return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
    39 }
    40 
    41 int main()
    42 {
    43     int n,i,j;
    44     while(~scanf("%d",&n))
    45     {
    46         int top = 1;
    47         yy = 1000000+5;
    48         for(i=0;i<n;i++)
    49         {
    50             scanf("%lld%lld",&P[i].x,&P[i].y);
    51             if(P[i].y<yy)
    52             {
    53                 yy = P[i].y;
    54                 xx = P[i].x;
    55                 j = i;
    56             }
    57         }
    58         P[j] = P[0];
    59         sort(P+1,P+n,cmp);
    60         S[0].x = xx;
    61         S[0].y = yy;
    62         S[1] = P[1];
    63         for(i = 2;i<n;)
    64         {
    65             if(top&&(Compare(S[top-1],S[top],P[i])<0)) top--;
    66             else S[++top] = P[i++];
    67         }
    68         long long max1 = -1;
    69         for(i = 0;i<=top;i++)
    70             for( j = i+1;j<=top;j++)
    71                 if(Dis(S[i],S[j])>max1)
    72                     max1 = Dis(S[i],S[j]);
    73         printf("%lld
    ",max1);
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    ActiveMQ 默认用户名和密码
    # ActiveMQ连接超时问题(java.net.SocketException: Connection reset)
    SpringBoot(十) Logback 配置详解
    postgresql10以上的自动分区分表功能
    基于Redis实现延时队列服务
    Redis(十三):Redis分布式锁的正确实现方式
    Redis(十七):批量操作Pipeline
    Redis(十八):Redis和队列
    PostgreSQL SELECT INTO和INSERT INTO SELECT 两种表复制语句
    PostgreSQL 从文件时间戳获悉一些信息(如数据库创建时间)
  • 原文地址:https://www.cnblogs.com/LGJC1314/p/6843638.html
Copyright © 2011-2022 走看看