zoukankan      html  css  js  c++  java
  • 51Nod P1100 斜率最大

    传送门: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1100

    由于2 <= N <= 10000, 所以不难想出一个O(n^2)的枚举算法,枚举两个点的坐标。不断更新最大斜率的值,用一个结构体数组来记录两个点,每次更新的时候将数组的下标重置为1。

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    
    int n, cnt, maxn = -1;
    int x[10005], y[10005];
    struct node {
        int c, b;
    }a[10005];
    
    bool cmp(node f, node g) {
        if(x[f.c] > x[g.c])return 1;
        else return 0;
    }
    
    int main() {
        scanf("%d", &n);
        for(int i=1; i<=n; i++) {
            scanf("%d%d", &x[i], &y[i]);
        }
        for(int i=1; i<=n; i++) {
            for(int j=i+1; j<=n; j++) {
                if(maxn < (y[i]-y[j])/(x[i]-x[j])) {
                    maxn = (y[i]-y[j])/(x[i]-x[j]);
                    cnt = 1;
                    a[cnt].c = i, a[cnt].b = j;
                }
                else {
                    if(maxn == (y[i]-y[j])/(x[i]-x[j])) {
                        a[++cnt].c = i, a[cnt].b = j;
                    }
                }
            }
        }
        sort(a+1, a+1+cnt, cmp);
        for(int i=1; i<=cnt; i++) {
            if(x[a[i].c] > x[a[i].b])
            printf("%d %d
    ", a[i].b, a[i].c);
            else printf("%d %d
    ", a[i].c, a[i].b);
        }
    }
    作者:wlz
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    20200304(10)
    20200303Tuesday(9)
    词根词缀explicit(8)
    词根词缀(7)
    20200303(6)
    什么是ring0-ring3
    20200301a
    mark字体大全
    评估评价 提高专项(5)
    图的广度优先遍历算法
  • 原文地址:https://www.cnblogs.com/bljfy/p/8467660.html
Copyright © 2011-2022 走看看