当前位置: 首页 > news >正文

水平可见直线--上凸包(andrew算法

P3194 [HNOI2008] 水平可见直线 - 洛谷

不过·只有90%

#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef  long long ll;
typedef pair<ll,int> pii;
int n;
struct no
{double k,b;int id;
}a[N],an[N];
int k;
bool cmp(no a,no b)
{if(a.k==b.k) return a.b<b.b;return a.k<b.k;
}
double cross(double ax,double ay,double bx,double by)
{return ax*by-ay*bx;
}
int t;
void andrew()
{an[0]=a[0];k=1;for(int i=0;i<n;i++){while(k>1&&cross(an[k-1].k-an[k-2].k,an[k-1].b-an[k-2].b,a[i].k-an[k-1].k,a[i].b-an[k-1].b)<=1e-6){k--;}an[k++]=a[i];///只求上凸包 }t=k;for(int i=n-2;i>=0;i--){while(k>t&&cross(an[k-1].k-an[k-2].k,an[k-1].b-an[k-2].b,a[i].k-an[k-1].k,a[i].b-an[k-1].b)<=1e-6){k--;}an[k++]=a[i];///只求上凸包 }
}
bool cc(no a,no b)
{return a.id<b.id;
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;for(int i=0;i<n;i++){cin>>a[i].k>>a[i].b;a[i].id=i+1;	}sort(a,a+n,cmp);andrew();sort(an+t-1,an+k,cc);for(int i=t-1;i<k;i++) cout<<an[i].id<<" ";return 0;
}

相关文章:

  • 【藏经阁】加密机服务完整解决方案,包含客户端+服务端
  • AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》
  • 【方法论】如何构建金字塔框架
  • 实操分享java应用容器化,使用docker作为容器工具
  • Cursor:简单三步提高生成效率
  • 想要建站但没有服务器?雨云RCA,免服务器即可搭建完整网站!!!
  • 目标检测新突破:用MSBlock打造更强YOLOv8
  • 基于 STM32 的全自动洗车监控系统设计与实现
  • 我的电赛(简易的波形发生器大一暑假回顾)
  • 学习黑客HTTP 请求头
  • MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
  • 第三十六节:特征检测与描述-特征匹配
  • 2025年PMP 学习二十 第13章 项目相关方管理
  • 【QGIS二次开发】地图编辑-06
  • python3GUI--智慧交通分析平台:By:PyQt5+YOLOv8(详细介绍)
  • 算法篇----二分查找
  • O2O电商变现:线上线下相互导流——基于定制开发开源AI智能名片S2B2C商城小程序的研究
  • #Redis黑马点评#(六)Redis当中的消息队列
  • k8s备份namespace
  • 多模态信息提取:打通数据价值的“最后一公里”
  • 水果预包装带来的环境成本谁来分担?
  • 俄乌刚谈完美国便筹划与两国领导人通话,目的几何?
  • 关税影响下沃尔玛想涨价,特朗普施压:自行承担,别转嫁给顾客
  • 新华每日电讯:博物馆正以可亲可近替代“高冷范儿”
  • 上海公办小学验证今起开始,下周一和周二分区进行民办摇号
  • 江苏省委组织部副部长高颜已任南京市委常委、组织部部长