记录编号 411542 评测结果 AAAAAAAAAAAAAAAAAAAAA
题目名称 [HZOI 2015] 包子美味 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 C++ 运行时间 0.417 s
提交时间 2017-06-05 17:47:02 内存使用 2.13 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=310;
typedef long double db;
db x[N],y[N];
struct line{
	int u,v;db alpha;
	line(int U=0,int V=0){
		u=U;v=V;
		alpha=atan2(y[u]-y[v],x[u]-x[v]);
	}
	db val()const{return x[v]*cos(alpha)+y[v]*sin(alpha);}
}l[N*N];
bool zero(db x){return abs(x)<1e-12;}
bool cmp(const line &x,const line &y){
	if (!zero(x.alpha-y.alpha)) return x.alpha<y.alpha;
	return x.val()<y.val();
}
int n,cnt,f[N];
int main()
{
	freopen("convex.in","r",stdin);
	freopen("convex.out","w",stdout);
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%Lf%Lf",&x[i],&y[i]);
	for (int i=1;i<=n;i++)
	for (int j=1;j<=n;j++)
		if (i!=j) l[++cnt]=line(i,j);
	sort(l+1,l+cnt+1,cmp);
	int ans=0;
	for (int s=1;s<=n;s++){
		for (int i=1;i<=n;i++) f[i]=-1e9;
		f[s]=0;
		for (int i=1;i<=cnt;i++) f[l[i].u]=max(f[l[i].u],f[l[i].v]+1);
		ans=max(ans,f[s]);
	}
	printf("%d\n",ans);
	return 0;
}