ICPC2019台北L-Largest Quadrilateral(求凸包+单调队列)

计算几何 求n个点中最大四边形 #define SIZE 2100 struct point_t{ llt x,y; }P[SIZE]; //叉积,OA×OB inline llt cross(point_t const&O,point_t const&A,point_t const&B){ llt xoa = A.x - O.x; llt yoa = A.y - O.y; llt xob = B.x - O. 阅读详情

题目链接

https://codeforces.com/gym/102460/attachments

模板

这个题可以学会O(nlogn)求外围凸包的模板。

题意

给一堆点,选出四个点使得按某种顺序连接这4个点的四边形面积最大。点数是4096,大概是n方的复杂度。

题解

  • 首先这个最大的四边形应该是个凸四边形。只有当最大凸包上只有3个点时才可能是凹四边形。如果是图凸包只有3个点,那就随便乱搞了。凸包上的3个点必选,我是枚举剩下不在凸包上的点作为第四个点,完了看看哪种连接顺序面积最大就完了。这个复杂度显然是 O ( n ) O(n) O(n)的。主要难点是一般情况。
  • 大概的思路是枚举凸包上的两个点确定一条边,然后在这条边的两边分别各自找到一点,使得这个点和这条边形成的三角形面积最大。暴力做法是 O ( n 3 ) O(n^3) O(n3),不太行。
  • 如果按某种顺序枚举边,就可能使得答案点的决策单调,就可以单调队列。枚举边可以按照与第一个点的极角逆时针枚举,这样决策的点也会逆时针旋转,所以在O(n)枚举边的第二个点的同时,决策三角形第三的答案也同时确定。总复杂度 O ( n 2 ) O(n^2) O(n2)。
  • 另外,double好像会出锅。因为只可能是整数或.5的小数。所以改成long long就过了。

AC代码

凸包的板子是网上白剽的。

#include<bits/stdc++.h>
using namespace std;

const int MaxN=10010;

int n,tot;//n?????,tot??????
struct point
{
    long long x,y;
};
point p[MaxN],CHP[MaxN],a[MaxN];//CHP??????????

bool cmp(point a,point b)//????,?x?????,??x??,?y??????
{
    return (a.x<b.x||(a.x==b.x&&a.y<b.y));
}

long long xmul(point a,point b,point c)//??
{
    return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}

void Andrew()
{
    sort(p,p+n,cmp);
    tot=0;

    for(int i=0;i<n;++i)//???????
    {
        while(tot>1&&xmul(CHP[tot-2],CHP[tot-1],p[i])<0)
            --tot;
        CHP[tot++]=p[i];
    }

    int k=tot;
    for(int i=n-2;i>=0;--i)//???????
    {
        while(tot>k&&xmul(CHP[tot-2],CHP[tot-1],p[i])<0)
            --tot;
        CHP[tot++]=p[i];
    }

    if(n>1)//??????????????
        --tot;
}

//long long odist(int i,int j){
//	return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
//}
//long long dist(int dian,int i,int j){
//	long long A=a[i].y-a[j].y;
//	long long B=a[i].x-a[j].x;
//	long long C=0-A*a[i].x-B*a[i].y;
//	long long mo=sqrt(A*A+B*B);
//	return (A*a[dian].x+B*a[dian].y+C)/mo;
//}
long long chaji(int i,int j,int k){
	long long x_1=a[i].x-a[j].x;
	long long y_1=a[i].y-a[j].y;
	long long x_2=a[i].x-a[k].x;
	long long y_2=a[i].y-a[k].y;
	return abs(x_1*y_2-x_2*y_1);
}
long long chajii(point i,point j,point k){
	long long x_1=i.x-j.x;
	long long y_1=i.y-j.y;
	long long x_2=i.x-k.x;
	long long y_2=i.y-k.y;
	return abs(x_1*y_2-x_2*y_1);
}
const double eps=1e-6;
int noton(int x){
	for(int i=1;i<=tot;i++){
		if(fabs(a[i].x-p[x].x)==0&&fabs(a[i].y-p[x].y)==0 )return 0;
	}
	return 1;
}

int main()
{
	int t;
	scanf("%d",&t);
	while(t--){
		memset(p,0,sizeof(p));
		memset(CHP,0,sizeof(CHP));
		memset(a,0,sizeof(a));
	    scanf("%d",&n);
	    for(int i=0;i<n;++i)
	    {
	        scanf("%lld%lld",&p[i].x,&p[i].y);
	    }
	    Andrew();
	    for(int i=0;i<tot;++i)
	    {
	        a[i+1]=CHP[i];
	        a[i+1+tot]=CHP[i];
	    }
		if(tot<=3){
	    	long long ans=0;
	    	for(int i=1;i<=n;i++){
	    		if(noton(i)){
	    			long long jian=min(
						min(chajii(p[i],a[1],a[2]),chajii(p[i],a[1],a[3]))
						,chajii(p[i],a[2],a[3]));
					ans=max(ans,chajii(a[1],a[2],a[3])-jian);
				}
			}
			if(ans%2)printf("%lld.5\n",ans/2);
			else printf("%lld\n",ans/2);
		}
		else{
		    long long ans=0;
		    for(int i=1;i<=tot;i++){
		    	
		    	int l=i,r=i;
		    	for(int j=i+1;j<=tot;j++){
		    		r=max(r,j);
		    		long long lastr=0;
		    		while(r<=i+tot){
						long long ss=chaji(r,i,j);
						if(ss<lastr){r--;break;}
		    			lastr=ss;
		    			r++;
						
					}
					if(r>i+tot)r--;
					l=max(l,i);
					long long lastl=0;
					while(l<=j){
						long long ss=chaji(l,i,j);
						if(ss<lastl){l--;break;}
						lastl=ss;
						l++;
					}
					if(l>j)l--;
					//printf("%d %d %d %d %lf %lf\n",i,j,l,r,lastl,lastr);
					ans=max(ans,lastl+lastr);
				}
			}
			if(ans%2)printf("%lld.5\n",ans/2);
			else printf("%lld\n",ans/2);
		}
	}
    return 0;
}
2019icpc台湾区域赛的ac代码.zip 2019icpc台湾的ac代码 2019icpc台湾的ac代码 2019icpc台湾的ac代码 2019icpc台湾的ac代码 立即下载

相关推荐

黑群晖二合一已损毁_手动修复黑群晖已损毁磁盘空间

lz的用法是这样的,一个中古级mac mini 2011上装有vmware esxi 7.6, 然后上面挂载了lz的华芸Asustor Nas的iscsi空间,lz用的是basic volume,然后esxi上面有虚拟的黑群晖6.2.2-24922,黑群晖的docker里跑着不可描述软件,但是发现下载速度过快时,比如有好几个文件同时下载,总速度超过60MB/s以后storage manager里很...

weixin_39669629的博客 1万+

Codeforces gym 102460L Largest Quadrilateral

旋转卡壳 双指针

Irving0323的博客 364

狗都能看懂的MAML原理讲解和代码实现

meta-leaning指的是元学习,元学习是深度学习的一个分支,一个好的元模型(meta-learner)应该具备对新的、少量的数据做出快速而准确的学习。通俗的来讲, 对于人来说,给几张橘猫的图片让看一下,再给你几张没见过的英短猫图片,你一定能很快识别出来都是猫。但是对于神经网络来说,并非如此。如果让一个小汽车分类网络去识别不同的大货车,那效果肯定很差。而传统的CNN网络都是输入大量的数据,然后进行分类的学习。但是这样做的问题就是,神经网络的通用性太差了,根本达不到“智能”的标准。而人类的认知系统,可以通

个人学习笔记 6万+

Gym - 102460L Largest Quadrilateral(几何-凸包+旋转卡壳求最大的四边形面积)

题目链接:点击查看 题目大意:在笛卡尔坐标系上给出 n 个点,要求选出四个点,使得组成的四边形面积最大,求出这个最大的面积,注意此处组成的四边形不是严格意义上的四边形,只需要选四个点就行 题目分析:首先猜也能猜出来四边形的四个点在凸包上肯定是最优的,所以我们可以 nlogn 求出凸包,不难想到的一个 n^3 的算法就是,n * n 去枚举对角线,这样就能将四边形划分为两个三角形,然后 O( n ) 去枚举三角形另一个的顶点,在对角线的两侧分别找到一个点使得这两个三角形的面积最大,维护一下这个面积的最大值

Falcon的博客 1126

AHB不对称半桥反激电路设计(一)变换器拓扑工作原理详解

本文详细分析了AHB(不对称半桥)反激变换器拓扑的工作原理及关键优势。该拓扑通过谐振腔结构实现原边功率管的零电压开通(ZVS)和副边整流管的零电流关断(ZCS),显著提升效率至95%以上。文章阐述了6个工作阶段的时序特征,包括谐振电感电流和电容电压的数学模型推导。AHB拓扑具有漏感能量回收、宽电压输出(适配PD快充等场景)和协同储能等优势,相比传统方案可缩小变压器体积30%,成为100-300W隔离电源的理想选择。

【Simon】的博客 7147

Sigrity IBIS建模实战:如何用T2B工具快速转换SPICE模型(附避坑指南)

本文详细介绍了如何使用Sigrity T2B工具将SPICE模型高效转换为IBIS模型,涵盖从环境配置、模型预处理到转换流程和验证策略的全过程。通过实战案例和避坑指南,帮助硬件工程师掌握高速电路设计中的IBIS建模技术,提升信号完整性分析效率。

weixin_29243279的博客 395

石油大----Contest2003 - 2020年秋季组队训练赛第七场--Problem L、Largest Quadrilateral (平面找四点组成面积最大的四边形,旋转卡壳)

题面: 题意: 平面上给定 nnn 个点,这 nnn 个点中选四个点组成一个四边形,问这个四边形的面积最大是多少。 题解: 很明显,最优解的四个点一定都在凸包上。 先求解凸包。 若凸包上面的点 ≤2\le2≤2 ,那么说明这些点共线或者重合。面积为 000。 若凸包上面的点 =3=3=3,则四边形的三个顶点为这三个点,剩余的那一个点选自凸包内部。枚举即可。 若凸包上面的点 >=4>=4>=4,我们枚举凸包上面的任意两点,在这两点的两侧分别求解一个面积最大的三角形,两个三角形相加即为在当前

_Griefs 430

(篇八)C语言在母串删子串、输入位置截取子串

文章目录一、字符串二、删除指定的字符三、从母串中截取子串四、输入位置截取子串 本篇主要介绍C语言字符串中的相关操作,然后分析两个C语言实例——在母串中指定删除子串、在母串中截取子串 一、字符串 了解C 语言的都知道,C语言中没有字符串类型,所以C语言是用字符串常量、字符指针、字符数组来表示字符串。这些字符串都是以 NULL、’\0’或者ASCII==0来结尾。说白了就是一个个字符组成一串有序序列,...

Viewinfinitely的博客 1512

Largest Quadrilateral --凸包+旋转卡壳

题意 这题的题目意思很显然,给出多个在二维平面的点,求这些点中所能形成的四边形的最大面积 首先要进行的是求这些点的凸包,在凸包上所构建的四边形中存在最大的四边形面积 在形成凸包后,有下列三种情况 最终所形成的凸包是一条直线,即所有点都在一条直线上,此时形成的凸包的点的个数为2,形成的四边形面积为0 最后形成的凸包的点只有三个,此时要构建的是一个凹四边形。那么直接枚举在凸包里面的点,求这个点与其中两个凸包上的点的最小面积。最后用凸包三角形的面积减去这个所求的最小三角形面积即可。 形成的凸包点的个数 ≥4≥4

bloom_er的博客 429

免Root抓包神器Packet Capture:安卓App数据捕获全攻略

本文详细介绍了免Root安卓抓包神器Packet Capture的安装与使用全攻略。通过利用安卓系统的VPN Service API,该工具无需Root权限即可捕获并解密App的HTTP/HTTPS网络流量。文章从核心原理、证书安装、实战抓包步骤到结果分析与常见问题排查,提供了完整指南,是移动端开发、安全测试和数据分析的实用利器。

weixin_29232507的博客 1075

WSOLA原理及matlab仿真

WSOLA原理 对于 OLA 算法来说,常常无法保持原信号中的周期性结构,在帧裁剪的过程中,不能保证每一个帧都能覆盖完整周期并保证其相位对齐,会产生相位跳跃失真。 为保证**基频不变**,就要使用 WSOLA 算法。 WSOLA 并不直接在 Ha 处找一帧进行直接拼接,而是在一个区间内寻找与理想帧最接近的一帧进行叠加。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8a234f4fde104fc69a9f3ddb7bcf3014.png?x-oss-process=ima

ManiacLook的博客 3214

2019 ICPC 台湾网络赛题解

變更於 14 小时前 2019 ICPC TOPC 簡易講評 tags: ICPC TOPC TOPC2019 題組資源 以下為 2019 ICPC Asia Taiwan Online Programming Contest 的競賽主席兼裁判長謝旻錚對此題組的簡易講評。 Problem A – Animal King Election Problem setter: Min-Zheng Shie...

weixin_44014982的博客 1169

优快云独家首发!万字长文,YOLOv5/v7/v8算法模型yaml文件史上最详细解析与教程!小白也能看懂!掌握了这个就掌握了魔改YOLO的核心!

🍀🍀🍀YOLOv5/v7/v8算法模型yaml文件史上最详细解析与教程,全网最强,学不会算我输!!!

Coding... 1万+

问题 L: Largest Allowed Area ( scanf + 二分 + 前缀和)

题目: http://icpc.upc.edu.cn/problem.php?cid=1740&pid=11 我的做法确实暴力,,不过他们说的 高级读入挂是什么? 思路,要找方形的空地, 二分答案,一开始的区间是(1,mini(C,R) ) 也就是(l,r), 找中间值 d=(l+r)/2 拿这个d 去在原图里面暴力找,看看能不能找到一个边长是d 的正方形(通过枚举所有点的...

超级菜 287

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

2019-2020 ICPC Asia Taipei-Hsinchu Regional Contest

2019-2020 ICPC Asia Taipei-Hsinchu Regional Contest L 题意:给N个点(N ≤\le≤ 4096),求四边形最大面积(只要有四个点即可,可以退化成三角形或直线,注意重复点的情况) 题解:建凸包,旋转卡壳跑每个点的对踵点。对于一对对踵点<u, v>,枚举其他点,找出直线<u, v>两侧面积最大、最小值。如果两侧都有点,用两侧的最大值相加更新答案;否则用有点的那一侧的最大值减最小值更新答案。 O(N2) #include<iost

micaudience的博客 989

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[2019 ICPC Taipei-Hsinchu] A.Rush Hour Puzzle //bfs

题目链接 题意: 思路://写过的最长的bfs [汗.jpg] #include<bits/stdc++.h> using namespace std; int a_[7][7],ans=11,cnt=1,c,sum; struct node{ int len; int u,pos,s,t; //u=1行,u=0列 node(){u=-1;s=7;} }v[20...

晚樱 1352

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

2019-2020 ICPC Asia Taipei-Hsinchu Regional Contest(C,D,H,J,K)

前言:萌新的第一次尝试写写icpc题,就上cf Gym里找了一套4星难度的题(满星是5星),因为自己一直刷视频学算法感觉到无聊,所以自己决定修正下自己学习算法的方法,改为刷题遇见后去学习,这样能很好的刺激自己主动性。所以每一套icpc的题我自己都要求写完每一道题,尽量ak,除非真的没有题解,一点提示都没有,再加上自己毫无想法。 关于第一次写icpc:个人认为台北这套题非常适合当萌新的第一套icpc题,个人就只写了签到,剩下的会慢慢更新,本场签到题极其温和,但是剩下的没看cf上4星说明还是非常有难度,只是不是

chitudexixi的博客 1926

2019 ICPC Asia Taipei - Hsinchu Regional

C. Are They All Integers?(暴力/思维) 题目链接 1.题目大意:给出一个序列判断序列中任意一个三元组是否满足(ai-aj)/ak均为整数 2.首先数据范围很小,可以直接暴力,时间复杂度O(n3) 3.但是如果数据更大了无法暴力,那么我们对此类问题必须研究一下以防不测。若任取三个数 a≤b≤c,如果 a != b,则 (b−a) / c 一定不为整数。 若任取三个数 a...

Happig的博客 1042

CF436F Banners(分块/凸包/单调队列)

CF436F Banners 首先有n个物品分别有ai和bi,然后定义价值为 c∗w+p∗(ai大于p且bi小于c的用户个数)c*w+p*(ai大于p且bi小于c的用户个数)c∗w+p∗(ai大于p且bi小于c的用户个数) 然后我们需要求解对于每一个c的最大价值和对应的p 首先我们先枚举c,然后每次加入一个点相当于是每次给一个前缀加横坐标,然后询问最大值。 因为每次加的大小是一定的,所以我们可以将其看作是一条直线,然后分块处理,每次对于完整的块就移动横坐标,维护单调队列,将横坐标小的弹掉,然后对于零散块直

xajd1906的博客 257

L - Largest Allowed Area

https://cn.vjudge.net/contest/296345#problem/L 思路:求最大子矩阵;1:二分,关闭同步流都会tle。。只能输入挂;2:单调 队列,在上一个方阵下减多一行一列还是合法,再从该点延申 #include<algorithm> #include<set> #include<cmath> #include<cstr...

newhonor 247

2019-2020 ICPC Asia Taipei-Hsinchu Regional Contest——Problem J Automatic Control Machine

题意: 给定一个mn题意:给定一个mn的01矩阵,然后选取其中的某些行,确保每一列都至少有一个1在选中的行中,求最少选中的行数。的01矩阵,然后选取其中的某些行,确保每一列都至少有一个1在选中的行中,求最少选中的行数。 解题思路: n<15.纯暴力。利用二进制状态压缩以及bitset去储存数据和与运算 #include <bits/stdc++.h> using namespac...

unightmare_siya的博客 2008

Codeforces Round #198 (Div. 2) / 340B Maximal Area Quadrilateral (点集中的最大四边形)

http://codeforces.com/contest/340/problem/B 枚举一条线段,再枚举这条线段左右两边的三角形,拼起来就是一个四边形了。 完整代码: /*186ms,0KB*/ #include using namespace std; int x[300], y[300], A[2]; int main() { int n, i, j, k,

AC,∑ndless 1285

ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 E.Territorial Dispute(凸包)

题目链接:Territorial Dispute 题意:给出n个点,给出坐标,你可以把点编号为’A’或者’B’,问题时存不存在一种编号的方法使得编号完后不存在一条直线能把不同类型的点分到线的不同侧。如果不存在这种方法,输出“NO”。如果存在这种方法,输出“YES”,方法可能有多种,再输出其中一种方法。 思路:n表示点的个数。n = 1 和 n = 2时,肯定输出“NO”。n = 3 时,当3点共

ganzibang 363

[ARC072F][凸包][单调队列]DAM

ARC072F 我们把x设为v,y设为v*t,则水的合并就是向量的加减 然后询问就是询问能凑出来的状态中最大的是多少 可以把每个状态看作平面上的一个点, 然后能凑出来的点集是凸的,那就单调队列维护一下上凸壳就好了 Code: #include<bits/stdc++.h> #define ll long long #define mod 998244353 #define db dou...

romiqi 274

The 2020 ICPC Asia Taipei-Hsinchu Site Programming Contest 题解

一.题目链接 https://codeforces.com/gym/102835 二.题解链接 好多待补…

bufang666 1035
上一篇: hdu6892Lunch(CCPC2020网络赛)SG定理
下一篇: LightOj1296Again Stone Game(手推SG函数)
Ada Chambers
博客等级 码龄8年 29粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值