51NOD斜率最大平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。

 1 package com.lionel.test;
 2 import java.util.ArrayList;
 3 import java.util.Arrays;
 4 import java.util.Collection;
 5 import java.util.Comparator;
 6 import java.util.HashMap;
 7 import java.util.Iterator;
 8 import java.util.List;
 9 import java.util.Map;
10 import java.util.Scanner;
11 import java.util.Set;
12 import java.util.TreeSet;
13 /**
14  * 平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。
15  *(点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。
16  *    数据中所有点的X轴坐标均不相等)
17  * 
18  * */
19 public class Temp5 {
20     public static void main(String[] args) {
21         Scanner in=new Scanner(System.in);
22         String  str=in.nextLine();
23         int len=Integer.parseInt(str);
24         Integer []xArr=new Integer[len];
25         Integer []yArr=new Integer[len];
26         Map<Integer,Integer>map2=new HashMap<Integer, Integer>();
27         for (int i = 0; i < len; i++) {
28             String [] s=in.nextLine().split(" ");
29             xArr[i]=Integer.parseInt(s[0]);
30             map2.put(Integer.parseInt(s[0]), i);
31             yArr[i]=Integer.parseInt(s[1]);
32         }
33        /* TreeSet<Double>set=new TreeSet<>(new Comparator<Double >() {
34             @Override
35             public int compare(Double d, Double d2) {
36                 // TODO Auto-generated method stub
37                 if (d2>d) {
38                     return 1;
39                 }else{
40                     return -1;
41                 }
42             }
43         });*/
44         double max=0;
45         Map<Double,Collection<Integer>>map=new HashMap<Double, Collection<Integer>>();
46         for (int i = 0; i < len-1; i++) {
47             for (int j = i+1; j < len; j++) {
48                 if (xArr[i]<xArr[j]) {
49                     Integer temp=xArr[j];
50                     xArr[j]=xArr[i];
51                     xArr[i]=temp;
52                     temp=yArr[j];
53                     yArr[j]=yArr[i];
54                     yArr[i]=temp;
55                 }
56             }
57         }
58         List<Integer>list3=new ArrayList<Integer>();
59         for (int i = 0; i < len-1; i++) {
60             for (int j = i+1; j < len; j++) {
61                 if (xArr[i]>xArr[j]) {
62                     
63                     double res=(yArr[i]-yArr[j])/((xArr[i]-xArr[j])*1.0);
64                     if (res>max) {
65                         list3.clear();
66                         list3.add(xArr[j]);
67                         list3.add(xArr[i]);
68                         max=res;
69                     }else if(res==max){
70                         list3.add(xArr[j]);
71                         list3.add(xArr[i]);
72                     }
73                 }
74             }
75         }
76         len=list3.size();
77         for (int i = 0; i < len; i++) {//2
78             Integer te=list3.get(i);
79             for (int j = i+1; j < len; j++) {
80                 if (te>list3.get(j)) {
81                     te=list3.get(j);
82                 }
83             }
84             if (i==0||i%2==1) {
85                 System.out.print((map2.get(te)+1)+" ");
86             }else{
87                 System.out.print((map2.get(te)+1));
88                 System.out.println();
89             }
90         }
91             
92         }
93 }

 

posted @ 2017-06-14 11:36  我为自己找借口  阅读(960)  评论(0编辑  收藏  举报