传统弱校HFUT的蒟蒻,真相只有一个

2015安徽省赛 C.LU的困惑

题目描述

Master LU 非常喜欢数学,现在有个问题:在二维空间上一共有n个点,LU每连接两个点,就会确定一条直线,对应有一个斜率。现在LU把平面内所有点中任意两点连线,得到的斜率放入一个集合中(若斜率不存在则不计入集合),他想知道这个集合中有多少个元素。

输入

第一行是一个整数T,代表T组测试数据 每组数据第一行是一个整数n,代表点的数量。2<n<1000 接下来n行,每行两个整数,0<x<10000,0<y<10000,代表点的坐标

输出

输出斜率集合中有多少个元素

样例输入

2 4 1 1 2 2 3 3 3 6 4 1 1 2 2 2 0 3 1

样例输出

3 3

用set容器
#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>

using namespace std;
long long d[10005],c[10005];
double add(int ax,int bx,int ay,int by)
{
    double tx,ty;
    tx=double(bx-ax);
    ty=double(by-ay);
    if(tx==0){return 23333;}
    return ty/tx;
}
 
int main()
{  
     
    set<double> seting;
    int T,m,i,j;
 
    double num;
    scanf("%d",&T);
    while(T>=1)
    {
        scanf("%d",&m);
        for(i=1;i<=m;i++)
        {
            scanf("%lld %lld",&d[i],&c[i]);
        }
        for(i=1;i<=m;i++)
        {
            for(j=i+1;j<=m;j++)
            {
                num=add(d[i],d[j],c[i],c[j]);
                if(num!=23333)
                {
                    set<double>::iterator it;
                    it=seting.find(num);
                    if(it==seting.end())
                    {
                        seting.insert(num);
                    }
                }
            }
        }
        printf("%d\n",seting.size());
        seting.clear();
        T--;
    }
    return 0;
}
/**************************************************************
    Problem: 1207
    User: 2014217052
    Language: C++
    Result: 正确
    Time:254 ms
    Memory:4572 kb
****************************************************************/

 

posted @ 2015-07-31 17:02  未名亚柳  阅读(333)  评论(0编辑  收藏  举报