zoukankan      html  css  js  c++  java
  • 51nod 1100 斜率最大

    1100 斜率最大 

    平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。
     
    (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有点的X轴坐标均不相等,且点坐标为随机。)
    Input
    第1行,一个数N,N为点的数量。(2 <= N <= 10000)
    第2 - N + 1行:具体N个点的坐标,X Y均为整数(-10^9 <= X,Y <= 10^9)
    Output
    每行2个数,中间用空格分隔。分别是起点编号和终点编号(起点的X轴坐标 < 终点的X轴坐标)
    Input示例
    5
    1 2
    6 8
    4 4
    5 4
    2 3
    Output示例
    4 2


    这题数据水,可以暴力过,不过最优解是nlogn 斜率最大的一定是相邻的两个点。
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N = 1e4+10;
     4 struct Point{
     5     int x, y;
     6     int id;
     7 }p[N];
     8 struct Nod{
     9     double k;
    10     int id1, id2;
    11 }nod[N];
    12 bool cmp1(Point &a, Point &b) {
    13     return a.x < b.x;
    14 }
    15 bool cmp2(Nod &a, Nod &b) {
    16     return a.k > b.k;
    17 }
    18 int main() {
    19     int n;
    20     cin >> n;
    21     for(int i = 0; i < n; i ++) {
    22         cin >> p[i].x >> p[i].y;
    23         p[i].id = i+1;
    24     }
    25     sort(p,p+n,cmp1);
    26     for(int i = 0; i < n-1; i ++) {
    27         nod[i].k = (p[i+1].y-p[i].y)/(p[i+1].x-p[i].x);
    28         nod[i].id1 = p[i].id;
    29         nod[i].id2 = p[i+1].id;
    30     }
    31     sort(nod,nod+n-1,cmp2);
    32     cout << nod[0].id1 << ' ' << nod[0].id2 << endl;
    33     return 0;
    34 }
  • 相关阅读:
    sql语句中where后边的哪些条件会使索引失效 SQL语句优化
    jvm 判断对象死亡
    mysql数据库优化概述详解
    java集合框架详解
    jvm 图形化工具之jconsole
    java io框架详解
    多台Linux之间文件共享
    二 redis的安装启动
    jvm 线上命令工具
    java 线程6种状态的转换
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/8934093.html
Copyright © 2011-2022 走看看