1. 程式人生 > >2018.10.03 bzoj1610:Line連線遊戲(計算幾何)

2018.10.03 bzoj1610:Line連線遊戲(計算幾何)

傳送門 計算幾何入門題,直接算出所有直線的斜率看有多少種不同就行了。 注意處理斜率不存在的情況。 程式碼:

#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; }