bzoj 1069

2023-10-21 20:40
文章标签 bzoj 1069

本文主要是介绍bzoj 1069,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

最开始想到的是枚举3个点,另一个点用卡壳的思想,但实际上可以只枚举两个点(对角线上的两个点),其余两个点用卡壳。

 

/**************************************************************Problem: 1069User: idy002Language: C++Result: AcceptedTime:232 msMemory:880 kb
****************************************************************/#include <cstdio>
#include <cmath>
#include <algorithm>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define eps 1e-10
#define N 2010
using namespace std;int sg( double x ) { return (x>-eps)-(x<eps); }
struct Vector {double x, y;Vector(){}Vector( double x, double y ):x(x),y(y){}Vector operator+( const Vector & b ) const { return Vector(x+b.x,y+b.y); }Vector operator-( const Vector & b ) const { return Vector(x-b.x,y-b.y); }Vector operator*( double b ) const { return Vector(x*b,y*b); }Vector operator/( double b ) const { return Vector(x/b,y/b); }double operator^( const Vector & b ) const { return x*b.y-y*b.x; }double operator&( const Vector & b ) const { return x*b.x+y*b.x; }bool operator<( const Vector & b ) const {return x<b.x || (x-b.x<eps && y<b.y);}
};
typedef Vector Point;bool onleft( Point &A, Point &B, Point &P ) {return sg((B-A)^(P-A)) > 0;
}
int convex( int n, Point *p, Point *c ) {int m;sort( p, p+n );c[m=0] = p[0];for( int i=1; i<n; i++ ) {while( m>0 && !onleft(c[m-1],c[m],p[i]) ) m--;c[++m] = p[i];}int k=m;for( int i=n-2; i>=0; i-- ) {while( m>k && !onleft(c[m-1],c[m],p[i]) ) m--;c[++m] = p[i];}return m+(n==1);
}
double area( Point &A, Point &B, Point &P ) {return (B-A)^(P-A);
}
double maxarea( int n, Point *p ) {if( n<=2 ) return 0.0;if( n==3 ) return fabs(area(p[0],p[1],p[2]));static int nxt[N];nxt[n-1]=0;for( int i=0; i<n-1; i++ ) nxt[i]=i+1;double rt = 0.0;for( int i=0; i<n; i++ ) {for( int j=nxt[nxt[i]],a=nxt[i],b=nxt[j]; nxt[j]!=i; j=nxt[j] ) {while( area(p[i],p[a],p[j])<area(p[i],p[nxt[a]],p[j]) ) a=nxt[a];while( area(p[j],p[b],p[i])<area(p[j],p[nxt[b]],p[i]) ) b=nxt[b];double ra = area(p[i],p[a],p[j]);double rb = area(p[j],p[b],p[i]);rt = max( rt, ra+rb );}}return rt/2.0;
}int n, cn;
Point pts[N], cvx[N];int main() {scanf( "%d", &n );for( int i=0; i<n; i++ ) scanf( "%lf%lf", &pts[i].x, &pts[i].y );cn = convex( n, pts, cvx );printf( "%.3lf\n", maxarea(cn,cvx) );
}
View Code

 

转载于:https://www.cnblogs.com/idy002/p/4418095.html

这篇关于bzoj 1069的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/256840

相关文章

【BZOJ】1324 Exca王者之剑 最大权独立集

传送门:【BZOJ】1324  Exca王者之剑 题目分析:赤裸裸的最大权独立集。。。最小割解决 代码如下: #include <cstdio>#include <vector>#include <cstring>#include <algorithm>using namespace std ;#define REP( i , a , b ) for ( int

【BZOJ】1026: [SCOI2009]windy数 数位DP

传送门:【BZOJ】1026: [SCOI2009]windy数 题目分析:数位DP水题。 代码如下: #include <stdio.h>#include <cstring>#include <algorithm>#define rep( i , a , b ) for ( int i = a ; i < b ; ++ i )#define For( i ,

【BZOJ】2152: 聪聪可可 点分治

传送门:【BZOJ】2152: 聪聪可可 题目分析:记录权值和%3的路径的个数。。。然后去重。。没了。。 代码如下: #include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std ;typedef lo

BZOJ 2440 2301 莫比乌斯应用

http://www.lydsy.com/JudgeOnline/problem.php?id=2440 Description 小 X 自幼就很喜欢数。但奇怪的是,他十分讨厌完全平方数。他觉得这些 数看起来很令人难受。由此,他也讨厌所有是完全平方数的正整数倍的数。然而 这丝毫不影响他对其他数的热爱。  这天是小X的生日,小 W 想送一个数给他作为生日礼物。当然他不能送一 个小X讨厌

BZOJ 3732: Network(最小生成树+倍增)

题目链接 题意:给出一个图,每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少 很明显最终查询的边一定是在最小生成树里面的,先跑出最小生成树,然后,可以树链剖分,也可以使用倍增来计算 #include<bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#define

hdu 1069 Monkey and Banana(dp 最长上升子序列)

http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:有n种类型的木块,木块是长方体,已知每种长方体的长宽高,且每种木块的数量是无限的。问这些木块能够摞起来的最高高度,摞起来的规则是上面的木块的长和宽必须严格小于下面木块的长和宽。 思路:把每种木块分成六种木块,然后对x排序,再对x和y求类似于最长上升子序列。这里dp对应的不是个数,而是摞起来的最高

BZOJ 2038 小Z的袜子(hose) (莫队离线)

题目地址:BZOJ 2038 裸的莫队算法。 代码如下: #include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>#in

BZOJ 2152 聪聪可可 (树上点分治)

题目地址:BZOJ 2152 找有多少对权值和为3的倍数的点。最简单的点分治。 代码如下: #include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#incl

BZOJ 3530 数数【AC自动机+数位dp】

[Sdoi2014]数数 简单数位dp+简单AC自动机 反正数位DP是队友写的 AC自动机要记录两个值,一个是是否为一个串的结束,即不合法状态,一个是前缀零的情况。 // whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostr

BZOJ 3531 旅行【树链剖分】

[Sdoi2014] 简单的树链剖分 以每个信仰应该建一个线段树,空间复杂度为 O(5×1010) O(5\times 10^{10}) 因此会爆空间,所以需要动态申请空间。 // whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <