记录编号 |
384653 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[天梯赛PAT]长城 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.424 s |
提交时间 |
2017-03-18 21:04:30 |
内存使用 |
2.32 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
typedef long long LL;
const int SIZEN=100010;
class Point{
public:
LL x,y;
Point(LL _x=0,LL _y=0):x(_x),y(_y){}
Point operator - (const Point &b){
return Point(x-b.x,y-b.y);
}
friend LL crs (const Point &a,const Point &b){
return a.x*b.y-a.y*b.x;
}
};
int N;
Point P[SIZEN];
int F[SIZEN];
bool ftf[SIZEN];
void work(void){
//scanf("%d",&N);
//for(int i=1;i<=N;i++) scanf("%lld%lld",&P[i].x,&P[i].y);
cin>>N;
for(int i=1;i<=N;i++) cin>>P[i].x>>P[i].y;
int ans=0,tp=0;
F[tp++]=1;
for(int i=2;i<=N;i++){
while(tp>=2&&crs(P[i]-P[F[tp-2]],P[F[tp-1]]-P[F[tp-2]])>=0) tp--;
ftf[F[tp-1]]=true;
F[tp++]=i;
}
for(int i=2;i<N;i++) ans+=ftf[i];
printf("%d\n",ans);
}
int main(){
freopen("gfw.in","r",stdin);
freopen("gfw.out","w",stdout);
work();
return 0;
}