2018.10.03 bzoj1610:Line連線遊戲(計算幾何)
阿新 • • 發佈:2018-12-13
傳送門 計算幾何入門題,直接算出所有直線的斜率看有多少種不同就行了。 注意處理斜率不存在的情況。 程式碼:
#include<bits/stdc++.h>
#define N 205
using namespace std;
inline int read(){
int ans=0,w=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return w*ans;
}
int n,tot=0;
struct Pot{double x,y;}p[N];
bool f=false;
double slope[N*N];
inline int sign(double x){return (x>1e-10)-(x<-1e-10);}
int main(){
n=read();
for(int i=1;i<=n;++i)p[i].x=read()*1.0,p[i].y=read()*1,0;
for(int i=1;i<n;++i)
for(int j=i+1;j<=n;++j){
if(!sign(p[i]. x-p[j].x)){f=true;continue;}
slope[++tot]=(p[i].y-p[j].y)/(p[i].x-p[j].x);
}
sort(slope+1,slope+tot+1);
int ans=f+1;
for(int i=2;i<=tot;++i)if(sign(slope[i]-slope[i-1]))++ans;
printf("%d",ans);
return 0;
}