zoukankan      html  css  js  c++  java
  • POJ1118 Lining Up

    快弄死我了 最后的原因是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;
    }
    

      

  • 相关阅读:
    【Boost】boost库asio详解5——resolver与endpoint使用说明
    VS路径定义
    C++ Primer 第二章 学习笔记
    C++ Primer 第三章 学习笔记
    C++ dll的隐式与显式调用
    BOOST编译方法
    Real World CTF一日游
    蝉知CMS5.6反射型XSS审计复现
    关于MJ刷新的报Too many arguments to function call, expected 0, have *问题
    XIB做适配(二)
  • 原文地址:https://www.cnblogs.com/lautsie/p/3176985.html
Copyright © 2011-2022 走看看