UVa 11168 Airport

2023-05-16

这个月看看计算几何,这道题写的代码出现的问题还是挺多的,不过索性最后解决了。

题意:给出平面上n个点,找一条直线,使得所有点在直线的同侧(也可以在直线上),且到直线上的距离之和尽量小。

思路:计算几何凸包求出包含所有点的多边形,那么所求直线即多边形其中一条边,这里涉及一个优化除该边之外所有点到边的距离,因为所有点在直线一侧,求出所有点的x坐标之和还有y坐标之和,用一般式解决,算法时间O(1),接下来就是遍历所有边了算法时间O(n).

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
struct Point
{
  double x,y;
  Point(double x=0,double y=0):x(x),y(y){}
};
typedef Point Vector ;
Vector operator + (const Vector& a, const Vector& b) {
    return Vector(a.x+b.x, a.y+b.y);
}
Vector operator - (const Vector& a, const Vector& b) {
    return Vector(a.x-b.x, a.y-b.y);
}
Vector operator * (const Vector& a, double p) {
    return Vector(a.x*p, a.y*p);
}
Vector operator / (const Vector& a, double p) {
    return Vector(a.x/p, a.y/p);
}
bool operator < (const Point& p1, const Point& p2){
    return p1.x<p2.x ||(p1.x==p2.x&&p1.y<p2.y);
}
bool operator == (const Point& p1, const Point& p2){
    return p1.x == p2.x && p1.y == p2.y;
}
double Cross(Vector A,Vector B) { return A.x*B.y - A.y*B.x;}
Point GLI(Point P,Vector v,Point Q,Vector w)
{
  Vector u=P-Q;
  double t=Cross(w,u)/Cross(v,w);
  return P+v*t;
}

int Andrew(Point *p,int n,Point *q)
{
  sort(p,p+n);
  int m=0;
  for(int i=0;i<n;i++)
  {
    while(m>1&&Cross(q[m-1]-q[m-2],p[i]-q[m-2])<=0) m--;
    q[m++]=p[i];
  }
  int k=m;
  for(int i=n-2;i>=0;i--)
  {
    while(m>k&&Cross(q[m-1]-q[m-2],p[i]-q[m-2])<=0) m--;
    q[m++]=p[i];
  }
  if(n>1) m--;
  return m;
}
const int maxn=10005;
Point q[maxn];
int main()
{
  int T,n,Case=1;double x,y;
  cin>>T;
  while(T--)
  {
    cin>>n;Point p[maxn];
    double xx=0,yy=0;
    for(int i=0;i<n;i++)
    {
      cin>>x>>y;
      p[i].x=x;p[i].y=y;
      xx+=x;yy+=y;
    }
    int m=Andrew(p,n,q);
    q[m]=q[0];
    /*for(int i=0;i<m;i++)
    {
      printf("^%f %f\n",q[i].x,q[i].y);
    }*/
    double ans=INF;
    //printf("#%f %f\n",xx,yy);
    for(int i=0;i<m;i++)
    {
      //i=(i+1)%m;
      //int x0=(xx-q[i].x-q[i+1].x);
      //int y0=(yy-q[i].y-q[i+1].y);
      double A=(q[i].y-q[i+1].y);
      double B=q[i+1].x-q[i].x;
      double C=(q[i+1].y*q[i].x-q[i].y*q[i+1].x);
      //printf("%f,%f,%f\n",A,B,C);
      ans=min(ans,fabs(A*xx+B*yy+C*n)/sqrt(A*A+B*B));
    }
    printf("Case #%d: ",Case++);
    if(n<=2) printf("0.000\n");
    else
    printf("%.3f\n",ans/n);
    //Q.erase();
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UVa 11168 Airport 的相关文章

  • CSU 1333 & Uva 12661 Funny Car Racing【最短路变形+spfa算法,链式前向星建图】

    Funny Car Racing Memory Limit 131072KB64bit IO Format lld amp llu Status Description There is a funny car racing in a ci
  • UVA-11520 Fill the Square

    思路 xff1a 因为要求是字典序 xff0c 这道题的第一反应就是从A Z选取字母 xff0c 在正方形中从上到下 xff0c 从左到右这样的顺序去填字母 xff0c 一旦判断这个字母旁边没有和它一样的 xff0c 那么就证明这个字母就是
  • Foreign Exchange (UVA - 10763)

    include lt iostream gt include lt bits stdc 43 43 h gt define maxn 500002 using namespace std int N1 maxn int N2 maxn in
  • UVa 11168 Airport

    这个月看看计算几何 xff0c 这道题写的代码出现的问题还是挺多的 xff0c 不过索性最后解决了 题意 xff1a 给出平面上n个点 xff0c 找一条直线 xff0c 使得所有点在直线的同侧 xff08 也可以在直线上 xff09 xf
  • uva 120(排序,检索)

    题目 Stacks and Queues are often considered the bread and butter of data structures and find use in architecture parsing o
  • UVa 133 The Dole Queue(圈的下标处理)

    本题难点在于用数组处理圈状物时下标的计算 include
  • Uva 489 Hangman Judge

    本题不难 但是我花了一个学期才AC 找到原因后想狠狠地揍自己一顿 原来是输出的一个单词拼错了 一直在解题思路和细节上找问题的我还曾吐槽这是什么脑残游戏 以后需细心 include
  • UVA 401 Palindromes 题解

    Palindromes A regular palindrome is a string of numbers or letters that is the same forward as backward For example the
  • UVa1347 Tour

    题目描述 这道题我想了很久都没有想到 看了lrj的题解才会做 首先可以想到转化成两个人向右走 关键在于状态的设计 设 f i j f i j 为走完了前 max i j max i j 的点 且两个人分别在i j的位置 且 i gt j i
  • UVa 12955 Factorial

    Problem uva onlinejudge org index php option com onlinejudge Itemid 8 page show problem problem 4834 开始想多了 想着不能简单贪心 要用dp
  • UVA-810 筛子难题 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 题目并不算难 但是有一些需要注意的事情 1 骰子样式是确定的 而且题目中的图示正确的 2 根据骰子的两个相邻的面 例如题目给出的正
  • uva 1601 The Morning after Halloween

    题目 The Morning after Halloween 题意 有n个用小写字母表示的鬼和一张地图 每个鬼都要移动到对应的大写字母 两个鬼的位置不能在一次移动中交换 问最少步数 思路 bfs 1 先将地图用图的方法表示 即在每一个空白
  • UVa 120 Stacks of Flapjacks

    Background Stacks and Queues are often considered the bread and butter of data structures and find use in architecture p
  • linux--shell错误:syntax error near unexpected token ‘('

    这几天编写了几个简单的shell程序 然后都出现了syntax error near unexpected token 的错误 然后实在是检查不出错误 后面百度了才找到的原因 之前错误的程序片段如下 usr whoami dr pwd 提示
  • uva 1601 The Morning after Halloween code2

    题目 The Morning after Halloween 题意 有n个用小写字母表示的鬼和一张地图 每个鬼都要移动到对应的大写字母 两个鬼的位置不能在一次移动中交换 问最少步数 思路 双向bfs 此题还可以单向bfs 见code1 1
  • 第八十七题 UVa12166 Equilibrium Mobile

    A mobile is a type of kinetic sculpture constructed to take advantage of the principle of equilibrium It consists of a n
  • Uva 10474 Where is the Marble?(排序与检索)

    本题若掌握了sort 和lower bound 两个函数 就无难点 include
  • uva10105(数论多项式展开公式)

    题意 多项式 x1 x2 xk n 输入n和k 0
  • UVa 12504 Updating a Dictionary

    Problem uva onlinejudge org index php option com onlinejudge Itemid 8 page show problem problem 3948 题意 貌似是模拟 Source Cod
  • UVa 1347 Tour

    题目 Tour 题意 来自luogu John Doe想用最小的路程游览完所有目的地 每个目的地都用坐标xi yi表示 任何两目的地的xi都不相同 两目的地之间的路程是两点之间的直线距离 John是这样走的 他从最左边的点开始 然后只能向右

随机推荐

  • centos7 update gcc to 7.2

    centos7默认的gcc版本是4 8 xff0c 我们需要升级到7 2 安装gcc span class token function wget span https github com gcc mirror gcc archive r
  • centos7升级GLIBC后导致系统不能启动成功

    centos7 glibc2 13 glibc2 27 1 准备U盘系统盘 xff0c 系统要和原来的系统版本匹配 开机重启按F2进入BIOS xff0c 通过U盘启动系统 选择Rescue mode 2 接下来 xff0c 选择 Resc
  • 在Linux中如何运行C语言写的脚本

    目录 1 xff1a Linux下如何运行C语言脚本 2 xff1a 实例展示 1 xff1a Linux下如何运行C语言脚本 Linux别的系统我不知道是不是这个方法 xff0c 我是用的ubuntu的 xff0c 其他的我也没测试过 x
  • Linux——利用Shell脚本编写进度条

    初级版本 xff08 原始进度条 xff09 xff1a span class hljs shebang bin bash span span class hljs built in echo span span class hljs st
  • C语言的日期和时间函数的用法及相应示例

    1 xff0e 概念 在C C 43 43 中 xff0c 对字符串的操作有很多值得注意的问题 xff0c 同样 xff0c C C 43 43 对时间的操作也有许多值得大家注意的地方 下面主要介绍在C C 43 43 中时间和日期的使用方
  • xrdp完美实现Windows远程访问Ubuntu 16.04【包括多人桌面与原生桌面】

    多人桌面 1 安装xrdp sudo apt get install xrdp 2 安装vnc4server 我这里是安装xrdp的时候自动安装的 我看网上很多说是需要单独安装的 3 安装xfce4 sudo apt get install
  • C++ range

    C 43 43 20 引入了 range 来简化对元素序列的处理 xff08 可以省略掉许多的循环遍历 xff09 1 range 和 view range range concept 通过提供一个迭代器以及一个哨兵来表示一个元素范围 xf
  • 高效求两个list的差集

    查一个ListA 的每个值 xff08 String字符串 xff09 在另外一个ListB中是否存在 xff0c 如果不存在就记录下来 模拟数据量 xff1a 100万 方法一 xff1a 直接调用list自带的removeAll方法 p
  • Codeforces Round #368 (Div. 2) A C

    大清早发现自己的rating涨了72分还是很高兴的 xff0c 毕竟之前都是在掉分 xff0c 还差9分才能到宝蓝啊 xff0c 果然还是小菜鸡 A Brain 39 s Photos 大水题 xff0c 要不是这个codeforces是外
  • Linux DISPLAY 设置

    在Linux Unix类操作系统上 DISPLAY用来设置将图形显示到何处 直接登陆图形界面或者登陆命令行界面后使用startx启动图形 DISPLAY环境变量将自动设置为 0 0 此时可以打开终端 输出图形程序的名称 比如xclock 来
  • cmake简单使用及编译项目打包成so文件

    简介 CMake是一个跨平台的编译自动配置工具 xff0c 它使用一个名为CMakeLists txt的文件来描述构建过程 xff0c 可以产生标准的构建文件 它可以用简单的语句来描述所有平台的安装 编译过程 它能够输出各种各样的makef
  • 2021基于Debian的All in One(NAS+软路由)配置教程

    基于Debian10的NAS系统配置 系统概述需求分析功能实现 系统配置简介Debian10的镜像下载与安装系统配置准备oh my zsh安装ssh远程访问开机自动登录root花生壳远程sshFrp图形化界面卸载网路配置磁盘相关命令 软件安
  • 3D Slicer源代码编译与调试(Visual Studio)

    开始 本文将Slicer的源码在Windows系统的编译过程记录下来 我的编译环境 xff1a Qt5 9 3VS2015Git 2 16 1CMake 3 14 1NSIS Unicode NSIS 编译 上述编译环境的准备好之后 xff
  • c++对象模型

    一 什么是c 43 43 对象模型 语言中直接支持面向对象程序设计的部分 对于各种支持的底层实现机制 二 c 43 43 对象的布局成本 成员函数不占用成本 member functions虽然再class的声明之内 xff0c 却不在ob
  • mybatis-plus返回查询总记录数方式(亲测)

    这篇文章主要介绍了mybatis plus返回查询总记录数方式 xff0c 具有很好的参考价值 xff0c 希望对大家有所帮助 如有错误或未考虑完全的地方 xff0c 望不吝赐教 mybatis plus返回查询总记录数mybatis pl
  • Android 模拟器串口与PC虚拟串口通讯

    基于上一篇文章 xff0c Android studio 使用NDK 实现串口 动态库 使用NDK生成 so 库操作PC中的串口 以及Android studio 3 0 and Gradle3 0 JNI 生成 so 库 1 开发环境 1
  • ArchLinux遇到问题unable to lock database

    在ArchLinux上更新系统或者安装软件 xff0c 如 pacman Syu xff0c 遇到下列问题 xff1a error failed to init transaction unable to lock database err
  • 【终极解决方案】当前不会命中断点,还没有为该文档加载任何符号

    我们在用vs进行debug时 xff0c 有的时候会出现无法单步调试 xff0c 提示 当前不会命中断点 xff0c 还没有为该文档加载任何符号 查询网上资料 xff0c 基本都是以下这样 xff1a 在vs里边 xff0c 工具 gt 选
  • Gitlab的安装及使用

    1 Gitlab概述 1 1 GitLab介绍 GitLab是利用Ruby on Rails一个开源的版本管理系统 xff0c 实现一个自托管的Git项目仓库 xff0c 可通过Web界面进行访问公开的或者私人项目 GitLab能够浏览源代
  • UVa 11168 Airport

    这个月看看计算几何 xff0c 这道题写的代码出现的问题还是挺多的 xff0c 不过索性最后解决了 题意 xff1a 给出平面上n个点 xff0c 找一条直线 xff0c 使得所有点在直线的同侧 xff08 也可以在直线上 xff09 xf