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