uva 270 - Lining Up

简介: 点击打开链接uva270 题目意思:    给定平面上的n个点,要求在同一条直线上最多几个 解题思路:    枚举所有解                      1:三个点共线的性质:A(X1,Y1),B(X2,Y2),C(X3,Y3);这个时候有(Y2-Y1)/(X2-X1) = (Y3-Y1)/(X3-X1),我们知道对于double类型是不能够直接进行比较的,所以由这个式子可以变形得到:(Y2-Y1)*(X3-X1) = (Y3-Y1)*(X2-X1)。

点击打开链接uva270


题目意思:    给定平面上的n个点,要求在同一条直线上最多几个


解题思路:    枚举所有解

                     1:三个点共线的性质:A(X1,Y1),B(X2,Y2),C(X3,Y3);这个时候有(Y2-Y1)/(X2-X1) = (Y3-Y1)/(X3-X1),我们知道对于double类型是不能够直接进行比较的,所以由这个式子可以变形得到:(Y2-Y1)*(X3-X1) = (Y3-Y1)*(X2-X1)。
                    2:要求给定的n给点,找到同一直线上点最多有几个。我们知道两个点就可以构成直线,所以我们必须去枚举每一条可能的直线,判断这时候在这条直线上的点的个数,更新最大值。
                    3:枚举,时间复杂度O(n^3)

                    4 sscanf的应用(见我博客“ACM---资料收集”)


代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
#include <set>
using namespace std;
#define MAXN 1010

int t , len;
int x[MAXN] , y[MAXN];
int vis[MAXN];

int solve(){
    int max = 1 , tmp_max;
    int i , j , k;
    int tmp_x1 , tmp_y1 , tmp_x2 , tmp_y2;
    for(i = 0 ; i < len ; i++){//枚举点A
        for(j = i+1 ; j < len ; j++){//枚举点B
            tmp_x1 = x[j]-x[i] ; tmp_y1 = y[j]-y[i];
            tmp_max = 2;
            for(k = j+1 ; k < len ; k++){//枚举点C
                tmp_x2 = x[k]-x[i] ; tmp_y2 = y[k]-y[i];
                if(tmp_y1*tmp_x2 == tmp_y2*tmp_x1)
                    tmp_max++;
            }
            if(max < tmp_max) max = tmp_max;//更新max
        }
    }
    printf("%d\n" , max);
}

int main(){
    //freopen("input.txt" , "r" , stdin);
    int i;
    char ch[100];
    scanf("%d%*c" , &t);
    getchar();//这里换行
    while(t--){
        i = 0;
        while(gets(ch)){
            if(!ch[0] && i) break;//注意如果gets没有读入东西则第一个为NULL即0
            sscanf(ch , "%d%d", &x[i] , &y[i]);
            i++;
        }
        len = i ;
        solve(); if(t) printf("\n");
    }
    return 0;
}



目录
相关文章
|
自然语言处理 安全 C++
【C++ 格式化输出 】C++20 现代C++格式化:拥抱std--format简化你的代码
【C++ 格式化输出 】C++20 现代C++格式化:拥抱std--format简化你的代码
8723 4
|
7月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度
YOLOv11改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度
139 12
YOLOv11改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度
|
8月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
359 16
|
SQL 运维 NoSQL
【Redis 故障排查】「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题排查指南及方案
【Redis 故障排查】「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题排查指南及方案
453 0
|
数据安全/隐私保护 编解码 Windows
Android--AES加密解密
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/78742974 概念不再罗嗦,百度。
1556 0
|
安全 IDE jenkins
十年磨一剑,墨菲安全正式发布开源项目murphysec(二)
十年磨一剑,墨菲安全正式发布开源项目murphysec
十年磨一剑,墨菲安全正式发布开源项目murphysec(二)
|
Java 数据处理 微服务
PolarisMesh系列文章——灰度发布系列(蓝绿发布)
蓝绿部署是一种应用发布模式,可将用户流量从先前版本的应用或微服务全量转移到新版本中(两者均保持在生产环境中运行)。
853 0
PolarisMesh系列文章——灰度发布系列(蓝绿发布)
|
存储 算法 网络协议
在Windows系统上安装zookeeper
在Windows系统上安装zookeeper
792 0
在Windows系统上安装zookeeper
|
云安全 存储 消息中间件
浅谈云计算的概念和体系架构
云计算是一个模式,是一种无处不在的,便捷的,按需的,共享的,基于网络访问的可配置计算资源,可以通过web界面进行管理工作。
2737 3
Java_Swing中让窗口居中显示的方法(三种方法)
Java_Swing中让窗口居中显示的方法(三种方法)
731 0