【BZOJ】1610: [Usaco2008 Feb]Line连线游戏
【算法】计算几何
【题解】计算所有斜率排序去重。
实数判断相等用fabs(...)≤eps。
★斜率题一定要注意斜率不存在的情况!!!
其实我觉得这份代码可以hack的……
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const double eps=1e-10,inf=1e20; const int maxn=40010; int n,x[maxn],y[maxn],im=0,m=0; double a[maxn]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d%d",&x[i],&y[i]); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) if(x[i]==x[j])a[++m]=inf;else a[++m]=1.0*(y[i]-y[j])/(x[i]-x[j]); sort(a+1,a+m+1); int ans=0; for(int i=1;i<=m;i++)if(fabs(a[i]-a[i-1])>eps)ans++; printf("%d",ans); return 0; }