POJ 1188 解题报告

看discuss和2606一样,稍改一下也交了。区别只是单输入还是多输入。

之前已经做过求最多点在同一条线上的问题了。当时测试数据要比这里复杂很多。比如double的精度,第一个点就是基准点等这里都没有考虑,但还是第一次就过了。

但基本算法是一样的。对所有的点进行遍历,作为基准点,看从这个点出发的直线最多通过多少别的点,加上1即可。基准点确定后,求所有其他点的斜率,按斜率排序,扫描看连续多少个点的斜率一样。


thestoryofsnow2606Accepted184K32MSC++1475B

thestoryofsnow
1118Accepted192K235MSC++1448B
/* 
ID: thestor1 
LANG: C++ 
TASK: poj1118 
*/
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <limits>
#include <string>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <cassert>

using namespace std;

const int MAXN = 700;

class Point
{
public:
	int x, y;
	double slope;
	Point() {}
	Point(int x, int y) : x(x), y(y) {}
	inline bool operator< (const Point& rhs) const {
		return this->slope < rhs.slope;
	}
};

double calculateSlope(const Point &p1, const Point &p2)
{
	if (p2.x == p1.x)
	{
		return numeric_limits<double>::max();			
	}

	return (p2.y - p1.y) * 1.0 / (p2.x - p1.x);
}

int main()
{
	// 1 < N < 700
	int N;
	Point points[MAXN];
	while (scanf("%d", &N) && N)
	{
		// printf("N = %d\n", N);
		for (int i = 0; i < N; ++i)
		{
			scanf("%d%d", &points[i].x, &points[i].y);
		}

		int maxp = 0;
		for (int i = 0; i < N; ++i)
		{
			for (int j = 0; j < N; ++j)
			{
				points[j].slope = calculateSlope(points[i], points[j]);
			}
			sort(points, points + N);
			double ps = points[0].slope, p = 1;
			for (int j = 1; j < N; ++j)
			{
				if (j == i)
				{
					continue;
				}
				if (points[j].slope == ps)
				{
					p++;
				}
				else
				{
					if (p > maxp)
					{
						maxp = p;
					}
					ps = points[j].slope;
					p = 1;					
				}
			}
		}

		printf("%d\n", maxp + 1);
	}

	return 0;  
}


技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值