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\n", a[i].b, a[i].c); else printf("%d %d\n", a[i].c, a[i].b); } }
作者:wlz
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
作者:Mystical-W
来源:http://www.cnblogs.com/bljfy
说明:客官~~您如果觉得写得好的话,记得给我点赞哦。如果要转载的请在合适的地方注明出处。谢
谢您的合作。您要是有什么有疑问的地方可以在下面给我评论。也可以直接私信我哦
声明:本作品由Mystical-W采用知识共享署名-非商业性使用-禁止演绎 4.0 国
际许可协议进行许可
来源:http://www.cnblogs.com/bljfy
说明:客官~~您如果觉得写得好的话,记得给我点赞哦。如果要转载的请在合适的地方注明出处。谢
谢您的合作。您要是有什么有疑问的地方可以在下面给我评论。也可以直接私信我哦
声明:本作品由Mystical-W采用知识共享署名-非商业性使用-禁止演绎 4.0 国
际许可协议进行许可