bzoj1610[Usaco2008 Feb]Line连线游戏*

bzoj1610[Usaco2008 Feb]Line连线游戏

题意:

n个点,问最多能画多少条线使两两不平行。n≤200。

题解:

枚举所有线,排序后去重。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define inc(i,j,k) for(int i=j;i<=k;i++)
 5 #define maxn 50000
 6 using namespace std;
 7 
 8 inline int read(){
 9     char ch=getchar(); int f=1,x=0;
10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
11     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
12     return f*x;
13 }
14 double xl[maxn]; bool hx; int n,x[300],y[300],tot,ans;
15 int main(){
16     n=read(); inc(i,1,n)x[i]=read(),y[i]=read();
17     inc(i,1,n)inc(j,i+1,n){
18         if(x[i]==x[j])hx=1;else xl[++tot]=(double)(y[i]-y[j])/(x[i]-x[j]);
19     }
20     sort(xl+1,xl+tot+1); ans=unique(xl+1,xl+tot+1)-xl-1;
21     printf("%d",ans+hx); return 0;
22 }

 

20160727

posted @ 2016-07-27 23:20  YuanZiming  阅读(170)  评论(0编辑  收藏  举报