快弄死我了 最后的原因是abs和fabs的区别。。。

说点收获:
1.cmp函数返回的是int,所以不要直接返回double相减的结果
2.define inf 1e9和eps 1e-9
3.在整数相除得到double时要1.0*
4.加上<cmath> ,用fabs取代abs,abs是用来整数取绝对值,应该用fabs
5.思路上,本题可从线的角度考虑转化为从点的角度考虑,这样变为N^2,然后不用hash,然后对斜率,用排序,又有logN。最后为O(N^2*logN)
6.注意边界情况
7.最后找错的时候采用了随机数数据和传说中正确的代码做比较,发现它们也还是有错,只是数据弱而已
8.下面的Discuss还是很有用的
9. GCD的思路也不错,应当会写GCD
此题做得真伤元气

#include <iostream>
#include <cmath> using namespace std; #define inf 1e9
#define eps 1e-9 int cmp(const void * a, const void * b)
{
double * x = (double *) a;
double * y = (double *) b;
if (fabs( *x - *y) < eps) return 0 ;
else if (*x < *y) return -1;
else return 1;
} int main()
{
int count = 0;
while (true)
{
int n;
cin >> n;
if (n == 0)
{
return 0;
}
count++;
int max = 0;
int* x = new int[n];
int* y = new int[n];
for (int i = 0; i < n; i++)
{
cin >> x[i];
cin >> y[i];
}
if (n == 1)
{
max = 2;
}
else if (n == 2)
{
max = 2;
}
else
{
for (int i = 0; i < n; i++)
{
double * tmp = new double[n];
int index = 0;
for (int j = i+1; j < n; j++)
{
if (x[i] == x[j]) tmp[index] = inf;
else
{
tmp[index] = 1.0 * (y[i] - y[j]) / (x[i] - x[j]);
}
index++;
}
qsort(tmp, index, sizeof (double), cmp);
int k = 1;
int prev = 0;
int localMax = 2;
while (k < index)
{
if (fabs(tmp[prev] - tmp[k]) < eps)
{
localMax++;
}
else
{
localMax = 2;
}
if (localMax > max)
{
max = localMax;
}
prev = k;
k++;
}
}
}
cout << max << endl;
}
return 0;
}

  

POJ1118 Lining Up的更多相关文章

  1. Lining Up(在一条直线上的最大点数目,暴力)

    Lining Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  2. Lining.js - 为CSS提供 ::nth-Line 选择器功能

    在CSS中,我们使用 ::first-line 选择器来给元素第一行内容应用样式.但目前还没有像 ::nth-line.::nth-last-line 甚至 ::last-line 这样的选择器.实际 ...

  3. UVA 270 Lining Up 共线点 暴力

    题意:给出几个点的位置,问一条直线最多能连过几个点. 只要枚举每两个点组成的直线,然后找直线上的点数,更新最大值即可. 我这样做过于暴力,2.7s让人心惊肉跳...应该还能继续剪枝的,同一直线找过之后 ...

  4. UVA 270 Lining Up (几何 判断共线点)

     Lining Up  ``How am I ever going to solve this problem?" said the pilot. Indeed, the pilot was ...

  5. 深入解读Linux与Android的相互关系(转-lining)

    大家都知道Android是基于Linux内核的操作系统,也曾经和Linux基金会因为内核问题产生过分歧,本文将开始对Android的内核进行剖析,主要介绍Android和Linux之间的关系,后续还会 ...

  6. POJ-1118(超时,但未找到原因)

    #include<iostream> #include<map> #include<vector> using namespace std; //y=kx+z ty ...

  7. poj 1118 Lining Up(水题)

    再思考一下好的方法,水过,数据太弱! 本来不想传的! #include <iostream> using namespace std; #define MAX 702 /*284K 422 ...

  8. HDU 1432 Lining Up (POJ 1118)

    枚举,枚举点 复杂度为n^3. 还能够枚举边的,n*n*log(n). POJ 1118 要推断0退出. #include<cstdio> #include<cstring> ...

  9. POJ 1118 Lining Up

    枚举,排序. 先将所有点按双关键字排序,然后枚举线的顶点$P$,剩余的点以$P$为中心进行极角排序,可以取个$gcd$,这样一样的点就排在一起了,然后统计一下更新答案. #pragma comment ...

随机推荐

  1. Redis 一:安装篇

    .安装环境,虚拟机 + centos6. PS::前提已经安装了yum的情况下 第一步:安装 mkdir /usr/redis 新建redis目录 cd /usr/redis 进入目录 wget ht ...

  2. 转:const“变量”、define的常量和static 变量

    首先讲C编译器的内存分配: 代码区 数据区 用户区=线程栈+堆 其中的数据区存储:常量(define)+静态变量(static)+符号集(const)+全局变量   然后讲一下编译的大致顺序: 注释- ...

  3. php读取excel日期类型数据的例子

    提供一个读取的函数:  代码如下 复制代码 //excel日期转换函数function excelTime($date, $time = false) { if(function_exists('Gr ...

  4. JAVA 编码机制

    先看例子: public class Test { public static void main(String[] args) { char han = '永'; System.out.printl ...

  5. 优化C++程序编译效率的一些方法

    优化是一件非常重要的事情.作为一个程序设计者,你肯定希望自己的程序既小又快.DOS时代的许多书中都提到,“某某编译器能够生成非常紧凑的代码”,换言之,编译器会为你把代码尽可能地缩减,如果你能够正确地使 ...

  6. Ztack学习笔记(1)-初识Ztack

    一.Zigbee协议 Zigbee是IEEE 802.15.4协议的代名词,是一种短距离.低功耗的无线通信技术.这一名称来源于蜜蜂的八字舞,因为蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“ ...

  7. [转]system函数返回值探究

    对于system这个函数的功能早就有一定了解,读书期间,就学习了UNIX系统编程这本书,后来买了APUE.我这个人总是有好读书不求甚解的毛病.对于system函数只知其一,不知其二.后来被人问起相关的 ...

  8. 插值和空间分析(一)_探索性数据分析(R语言)

    > library(lattice) > library(sp) > data(meuse) > coordinates(meuse) <- c("x" ...

  9. Andriod wifi 基本操作

    从用户角度看,Android Wi-Fi模块自下向上可以看为5层:硬件驱动程序,wpa_suppplicant,JNI,WiFi API,WifiSettings应用程序. 1.wpa_supplic ...

  10. iOS 开发之粒子效果

    本文由糖炒小虾.Benna翻译 ,校对:sai.u0u0.iven.子龙山人 iOS 5中的UIKit粒子系统教程 Ray的话:这是第15篇.也是最后一篇<iOS 5 盛宴>中的iOS 5 ...