<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks

    ``How am I ever going to solve this problem?" said the pilot.

    Indeed, the pilot was not facing an easy task. She had to drop packages at specific points scattered in a dangerous area. Furthermore, the pilot could only fly over the area once in a straight line, and she had to fly over as many points as possible. All points were given by means of integer coordinates in a two-dimensional space. The pilot wanted to know the largest number of points from the given set that all lie on one line. Can you write a program that calculates this number?

    Your program has to be efficient!

    Input

    The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.
    The input consists of N pairs of integers, where 1 < N < 700. Each pair of integers is separated by one blank and ended by a new-line character. The list of pairs is ended with an end-of-file character. No pair will occur twice.

    Output

    For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.
    The output consists of one integer representing the largest number of points that all lie on one line.

    Sample Input

    1
    
    1 1
    2 2
    3 3
    9 10
    10 11

    Sample Output

    3

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.HashMap;

    public class Problem270 {

        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args) {
            
    int times=0;
            
            ArrayList param 
    = new ArrayList();
            ArrayList result 
    = new ArrayList();
            
            
    int largestNum = 0;
            
            String s
    =null;
            
    try {
                
    //get start point
                BufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) );
                s 
    = cin.readLine();
                
                
    if(s==null || s.length()<1 || !isNumber(s)){
                    
    if(Integer.parseInt(s)>=700 || Integer.parseInt(s)<=0){
                        System.out.println(
    "error! the start number must between 0 to 700");
                        
    return;
                    }
    else{
                        System.out.println(
    "input a number!!");
                    }

                }

                
                times 
    = Integer.parseInt(s);
                
                
    //get the space line
                cin = new BufferedReader( new InputStreamReader( System.in ) );
                s 
    = cin.readLine();
                
    if(s.trim().length()>0){
                    System.out.println(
    "you must enter a space line here!!");
                    
    return;
                }

                
                
    for(int i=0; i<times; i++){    
                    
    while(true){
                        cin 
    = new BufferedReader( new InputStreamReader( System.in ) );
                        s 
    = cin.readLine();
                        
    if(s.trim().length()<1){
                            result.add(calculate(param, largestNum));
                            param 
    = new ArrayList();
                            largestNum
    =0;
                            
    break;
                        }

                                    
                        
    if(isParams(s)){
                            param.add(s);
                        
                            
    //set largestNum
                            String[] strs = s.split(" ");
                            
    if(largestNum<Integer.parseInt(strs[0])){
                                largestNum
    =Integer.parseInt(strs[0]);
                            }

                            
    if(largestNum<Integer.parseInt(strs[1])){
                                largestNum
    =Integer.parseInt(strs[1]);
                            }

                        }
    else{
                            System.out.println(
    "error param!");
                            
    return;
                        }

                    }

                }

                
    //            //after get params, creat a new array
    //            int[][] road = initRoad(param, largestNum);
    //            s = (String) param.get(startpoint-1);
    //            String[] strs = s.split(" ");
    //            
    //            int x = Integer.parseInt(strs[0]);
    //            int y = Integer.parseInt(strs[1]);
    //            
    //            calculate(road, x, y);
                
                
    for(int i=0; i<times; i++){
                    System.out.println(result.get(i));
                    System.out.println(
    "");
                }

                
                
            }
     catch (IOException e) {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }
        

        }

        
        
    private static String calculate(ArrayList param, int largestNum) {
            
    int[][] road = initRoad(param, largestNum);
                
            
    int tempPointNum=0;
            
            
    //leftbottom
            for(int i=0; i<road.length; i++){
                
    int temp = getTempPointNum(00, i, road.length-1, road);
                
    if(temp>tempPointNum){
                    tempPointNum 
    = temp;
                }

            }

            
    //        rightbottom
            for(int i=0; i<road.length; i++){
                
    int temp = getTempPointNum(00, road.length-1, i, road);
                
    if(temp>tempPointNum){
                    tempPointNum 
    = temp;
                }

            }

            
    //        leftbottom
            for(int i=0; i<road.length; i++){
                
    int temp = getTempPointNum(road.length-1, road.length-1, i, road.length-1, road);
                
    if(temp>tempPointNum){
                    tempPointNum 
    = temp;
                }

            }

            
    //        rightbottom
            for(int i=0; i<road.length; i++){
                
    int temp = getTempPointNum(road.length-1, road.length-1, road.length-1, road.length-1, road);
                
    if(temp>tempPointNum){
                    tempPointNum 
    = temp;
                }

            }

            
            
    return tempPointNum + "";
        }


        
    private static int getTempPointNum(int x1, int y1, int x2, int y2, int[][] road) {
            
    int result=0;
            
    if(x1==x2){
                
    for(int i=y1>y2?y2:y1; i<(y1>y2?y1:y2); i++){
                    
    if(road[x1][i]==1)
                        result
    ++;
                }

                
    return result;
            }

            
            
            
    double liner = Math.abs(y1-y2)/Math.abs(x1-x2);
            
    if(liner>=0){
                
    if(x1>x2){
                    
    for(int i=x2; i<=x1; i++){
                        
    int tempY = (int)((i-x2)*liner + y2);
                        
    if(x2==i&&y2==tempY){
                            
                        }
    else if((y2-tempY)/(x2-i)==liner){
                            
                        }
    else{
                            
    continue;
                        }

                        
                        
    if(road[i][tempY]==1)
                            result
    ++;
                    }

                }
    else{
                    
    for(int i=x1; i<=x2; i++){
                        
    int tempY = (int)((i-x1)*liner + y1);
                        
    if(x1==i&&y1==tempY){
                            
                        }
    else if((y1-tempY)/(x1-i)==liner){
                            
                        }
    else{
                            
    continue;
                        }

                        
                        
    if(road[i][tempY]==1)
                            result
    ++;
                    }

                }

            }

            
    return result;
        }


        
    private static int[][] initRoad(ArrayList param, int largestNum) {
            
    // TODO Auto-generated method stub
            int[][] result = new int[largestNum][largestNum];
            
            String s
    =null;
            String[] strs;
            
    for(int i=0; i<param.size(); i++){
                s 
    = (String) param.get(i);
                strs 
    = s.split(" ");
                result[Integer.parseInt(strs[
    0])-1][Integer.parseInt(strs[1])-1= 1;
            }
            
            
    return result;
        }


        
    private static boolean isParams(String s) {
            String[] strs 
    = s.split(" ");
            
    if(strs.length!=2){
                
    return false;
            }

            
            
    if(isNumber(strs[0]) && isNumber(strs[1])){
                
    return true;
            }

            
            
    return false;
        }


        
    private static boolean isNumber(String s) {
            
    boolean result = true;
            
    for(int i=0; i<s.length(); i++){
                
    if(s.charAt(i)>='0' && s.charAt(i)<='9'){
                    
    continue;
                }
    else{
                    result
    =false;
                    
    break;
                }

            }

            
    return result;
        }


    }

    posted on 2005-12-09 10:00 hopeshared 閱讀(926) 評論(0)  編輯  收藏 所屬分類: Google Code Jam

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费观看男人免费桶女人视频| 无码av免费毛片一区二区| 国产人成免费视频| 国产亚洲国产bv网站在线| 国产精品免费精品自在线观看| 亚洲成人激情在线| 久久国产乱子伦免费精品| 朝桐光亚洲专区在线中文字幕 | 免费A级毛片av无码| 亚洲AV午夜成人片| 无码人妻一区二区三区免费看| 久久精品国产亚洲av麻豆| 麻豆成人久久精品二区三区免费| 在线观看亚洲人成网站| 16女性下面扒开无遮挡免费| 亚洲av成人综合网| 在线成人a毛片免费播放| 国产精品亚洲AV三区| 亚洲成年看片在线观看| 国产99久久久国产精免费| 国产亚洲综合一区柠檬导航| 亚洲免费视频在线观看| 亚洲免费电影网站| 国产午夜鲁丝片AV无码免费| 9久热这里只有精品免费| 精品亚洲综合在线第一区| 亚洲黄色免费电影| 亚洲高清毛片一区二区| 亚洲福利精品一区二区三区| 两个人www免费高清视频| 成人毛片免费观看视频在线| 国产精品亚洲天堂| 最新亚洲成av人免费看| 最近免费字幕中文大全视频| 久久亚洲精品国产亚洲老地址| 国产乱子伦片免费观看中字| 中文字幕视频在线免费观看| 亚洲国产综合精品中文第一| 最新亚洲成av人免费看| A在线观看免费网站大全| 日韩在线视频播放免费视频完整版|