<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 閱讀(914) 評論(0)  編輯  收藏 所屬分類: Google Code Jam

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


    網站導航:
     
    主站蜘蛛池模板: 四虎影视成人永久免费观看视频| 日本免费高清视频| 最新国产AV无码专区亚洲| a毛片免费观看完整| 久久亚洲免费视频| 33333在线亚洲| 免费大黄网站在线观看| 亚洲熟妇丰满xxxxx| 亚洲成a人片在线观看国产| 免费观看成人久久网免费观看| 亚洲天堂2016| 亚洲无av在线中文字幕| 成年性午夜免费视频网站不卡| 一本大道一卡二大卡三卡免费| 亚洲精品国产啊女成拍色拍| 免费久久精品国产片香蕉| 99re这里有免费视频精品| 国产成人亚洲精品播放器下载| 久久精品亚洲综合专区| 国产精品免费看久久久久| 国产好大好硬好爽免费不卡| 在线亚洲v日韩v| 亚洲冬月枫中文字幕在线看| 国产亚洲精品影视在线产品| 全免费a级毛片免费**视频| 久久久久成人精品免费播放动漫| 国产亚洲精品免费| 亚洲免费在线视频观看| 亚洲av无码一区二区乱子伦as| 国产老女人精品免费视频| 1000部拍拍拍18勿入免费视频软件| 一级女人18片毛片免费视频| 中文字幕亚洲精品无码| 亚洲人成电影福利在线播放| 亚洲国产中文字幕在线观看| 日韩毛片无码永久免费看| 99久久国产热无码精品免费| 无码国产精品一区二区免费vr | 老汉色老汉首页a亚洲| 亚洲精品无码成人片在线观看| 成人免费视频一区二区三区|