记录编号 |
411542 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAA |
题目名称 |
[HZOI 2015] 包子美味 |
最终得分 |
100 |
用户昵称 |
FoolMike |
是否通过 |
通过 |
代码语言 |
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;
}