poj 3348 Cows 求凸包以及凸包的面积

题目来源:

http://poj.org/problem?id=3348

1:任意多边形p[0,n-1]的面积为

for(int i=0 ; i<=n-1 ; i++){
sum+= (sk[i]^sk[(i+1)%(n) ] )*0.5;
}

2: 求凸包, 用graham 模板

代码如下:

#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <stack>
#include <string>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <set>
#include <math.h>
#include <cmath>
#include <map>
#include <queue>
using namespace std ;
typedef long long LL;
const int N = 10010;
double EPS= 1e-10;
double add(double a, double b)
{if( fabs(a+b)< EPS * ( fabs(a)+fabs(b) ) )  return 0;return a+b;
}
struct Point{double x,y;Point(){}Point(double _x, double _y):x(_x),y(_y){}Point operator + (Point p){return Point( add(x,p.x), add( y,p.y ) );}Point operator -(Point p){return Point( add(x,-p.x), add(y, -p.y) );}double operator^(Point p){return add(x*p.y, -y*p.x );}friend istream& operator>>(istream& is, Point& p){is>>p.x>>p.y;return is;}double dist(Point p){return sqrt( add( ( x-p.x)*(x-p.x) , (y-p.y)*(y-p.y) ) );}
};
Point List[N]; // 点集
int top;  // 栈顶指针
Point sk[N]; //
bool cmp(Point a, Point b) // 按y轴值从小到大, y轴值相同时,x轴从小到大排列
{if(a.y != b.y) return a.y < b.y;else  return a.x < b.x;
}
bool operator < (Point a, Point b) // 极角排序
{double tmp= (a-List[0])^(b-List[0]);if(tmp > 0) return 1;else if(tmp== 0 && a.dist(List[0]) <b.dist(List[0])  ) return 1;return 0;
}
void init(int n)
{for(int i=0 ; i<n ;i++)cin>>List[i];sort(List, List+n,cmp);// 排序后 List[0]为最左下方的点sort(List+1 , List+n ); // 对List[1,n-1] 中的点进行极角排序,为凸包做准备
}
void graham(int n)
{sk[0]=List[0];sk[1]=List[1];top=1;double t;for(int i=2 ; i< n ; i++){while(top >= 1 && ( (sk[top]-sk[top-1] )^(List[i]-sk[top-1] ) ) <=0 )top--; // 不是凸包中的点出栈top++;// 点i进栈sk[top]=List[i];}
}
int main()
{int n;cin>>n;init(n);graham(n);double sum=0.0;for(int i=0 ; i<=top ; i++){sum+= (sk[i]^sk[(i+1)%(top+1) ] )*0.5;}printf("%d\n",(int)sum/50);return 0;
}

 

转载于:https://www.cnblogs.com/zn505119020/p/3644606.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 网络设备驱动开发(一) —— linux内核网络分层结构

Linux内核对网络驱动程序使用统一的接口&#xff0c;并且对于网络设备采用面向对象的思想设计。 Linux内核采用分层结构处理网络数据包。分层结构与网络协议的结构匹配&#xff0c;既能简化数据包处理流程&#xff0c;又便于扩展和维护。 一、内核网络结构 在Linux内核中&#…

windows清理剪切板

开始——运行——clipbrd &#xff08;WINR&#xff09;转载于:https://blog.51cto.com/eblog/1390662

Linux 网络设备驱动开发(二) —— Linux 网络栈剖析

一、协议简介 虽然对于网络的正式介绍一般都参考了 OSI&#xff08;Open Systems Interconnection&#xff09;模型&#xff0c;但是本文对 Linux 中基本网络栈的介绍分为四层的 Internet 模型&#xff08;如图 1 所示&#xff09;。 图 1. 网络栈的 Internet 模型 这个栈的最底…

Android之BroadcastReceiver 监听系统广播

绑定广播有两种方式 一.配置文件绑定&#xff0c;在程序未启动也能监听 二.代码方式绑定&#xff0c;在程序启动后才能监听 1.绑定和取消绑定广播 public class MainActivity extends Activity {private Button registerButtonnull;private Button unRegisterButtonnull;privat…

Linux 网络设备驱动开发(三) —— 网络设备驱动基本原理和框架

一、协议栈层次对比 二、Linux网络子系统 Linux网络子系统的顶部是系统调用接口层。它为用户空间提供的应用程序提供了一种访问内核网络子系统的方法&#xff08;socket&#xff09;。位于其下面是一个协议无关层&#xff0c;它提供一种通用的方法来使用传输层协议。然后是具…

国产杀毒软件也开始支持虚拟化

今天不小心看到一个较老的“新”闻&#xff0c;国产安全软件厂商瑞星已经推出支持VMware vshield Endpoint技术的防病毒产品&#xff0c;也就是说如果客户今天使用的是VMware的虚拟化软件&#xff0c;上面运行的所有虚拟机就不需要安装传统的防病毒软件程序&#xff0c;而可以直…

VRP平台基本操作

一、显示系统信息 <Huawei>display version 图上所示可以知道VRP平台信息&#xff0c;运行的版本&#xff0c;运行的时间 二、修改和查看设备系统时间参数 1.查看时间 <Huawei>display clock 2.修改系统日期和时间 三、进入系统视图界面 <Huawei>system-view…

Android中获取应用程序(包)的信息-----PackageManager的使用(一)

本节内容是如何获取Android系统中应用程序的信息&#xff0c;主要包括packagename、label、icon、占用大小等。具体分为两个 部分&#xff0c;计划如下&#xff1a; 第一部分&#xff1a; 获取应用程序的packagename、label、icon等 &#xff1b; 第二部分&#xff1a; 获取应用…

VRP平台总体介绍及基础配置

前言 1、VRP软件系统基础 VRP系统在启动时需要加载“系统软件”和“配置文件”两部分&#xff0c;这与其它品牌网络交换机的操作系统是一样的。如果指定了下次启动的补丁文件&#xff0c;还需加载补丁文件。修改VRP系统启动的场景一般有以下几种&#xff1a; a-- 对交换机进行升…

小强的HTML5移动开发之路(43)——JqueryMobile页眉、工具栏和标签栏导航

一、页眉1、添加页眉和页脚<div data-role"header"><h1>第 1 页</h1></div><div data-role"footer"><h4>页面脚注</h4></div>默认的页眉在屏幕的顶部边缘显示&#xff0c;而且在在屏幕滚动时&#xff0c;…

交换机开发(二)—— 三层交换机报文转发过程

如图所示&#xff0c;假如主机A想访问主机B&#xff0c;首先主机A会将自己的IP地址和子网掩码做与操作,得出网路地址(如:Host-A的IP地址100.1.1.2与自身掩码255.255.255.0做与操作后,得到的网络号是100.1.1.0).然后判断目的IP地址(即Host-B的IP地址)与自己的网络地址是不是在同…

分布式搜索elasticsearch配置文件详解

2019独角兽企业重金招聘Python工程师标准>>> elasticsearch的config文件夹里面有两个配置文件&#xff1a;elasticsearch.yml和logging.yml&#xff0c;第一个是es的基本配置文件&#xff0c;第二个是日志配置文件&#xff0c;es也是使用log4j来记录日志的&#xff…

交换机开发(三)—— 深入分析三层网络交换机的原理和设计

引言传统路由器在网络中起到隔离网络、隔离广播、路由转发以及防火墙的作业&#xff0c;并且随着网络的不断发展&#xff0c;路由器的负荷也在迅速增长。其中一个重要原因是出于安全和管理方便等方面的考虑&#xff0c;VLAN(虚拟局域网)技术在网络中大量应用。VLAN技术可以逻辑…

XML 命名空间(XML Namespaces)

为什么80%的码农都做不了架构师&#xff1f;>>> XML 应用程序 XML CDATA XML 命名空间提供避免元素命名冲突的方法。 命名冲突 在 XML 中&#xff0c;元素名称是由开发者定义的&#xff0c;当两个不同的文档使用相同的元素名时&#xff0c;就会发生命名冲突。 这个…

交换机开发(四)—— ARP 基础知识解析

一、ARP协议简介 Internet是由各种各样的物理网络通过使用诸如路由器之类的设备连接在一起组成的。当主机发送一个数据包到另一台主机的过程中 可能要经过多种不同的物理网络。主机和路由器都是在网络层通过IP地址来识别的&#xff0c;这个地址是在全世界内唯一的。 然而&…

VRP网络操作系统简介

VRP (Versatile Routing Platform)即通用路由平台&#xff0c;是华为在通信领域多年的研究经验结晶&#xff0c;是华为所有基于IP/ATM构架的数据通信产品操作系统平台。运行VRP操作系统的华为产品包括路由器、局域网交换机、ATM交换机、拨号访问服务器、IP电话网关、电信级综合…

Type mismatch:

Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement import java.sql.PreparedStatement; java连接数据库的问题&#xff1a;Type mismatch: cannot convert from ResultSet to ResultSet 包导入错了,你要导入的是import jav…

Linux 下挂载新硬盘方法

Linux的硬盘识别: 一般使用”fdisk -l”命令可以列出系统中当前连接的硬盘 设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息. 1.关闭服务器加上新硬盘 2.启动服务器&#xff0c;以root用户登录 3.查看硬盘信息 #fdisk -l [cpp] view plaincopy Disk /dev/sda: 42.9 GB…

php面向对象之单表操作类

<?php //数据库单表操作类 define("HOST","localhost"); define("USER","root"); define("PASS",""); define("DBNAME","lamp78"); class Db {protected $link; //连接资源protected $…

C++ 学习基础篇(一)—— C++与C 的区别

编程的学习学无止境&#xff0c;只掌握一门语言是远远不够的&#xff0c;现在我们开始C的学习之路&#xff0c;下面先看下C 与C 的区别 一、C概述 1、发展历史 1980年&#xff0c;Bjarne Stroustrup博士开始着手创建一种模拟语言&#xff0c;能够具有面向对象的程序设计特色。在…