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

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

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

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      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 閱讀(913) 評論(0)  編輯  收藏 所屬分類: Google Code Jam

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


    網(wǎng)站導(dǎo)航:
    相關(guān)文章:
     
    主站蜘蛛池模板: 亚洲日本va在线观看| 免费无码午夜福利片 | 99视频在线免费| 亚州免费一级毛片| 人成午夜免费视频在线观看| 日本免费福利视频| 中文字幕亚洲无线码a| 亚洲精品私拍国产福利在线| 亚洲精品天堂无码中文字幕| 一区二区三区在线免费观看视频| 久久久久av无码免费网| 亚洲国产成人久久99精品| 国产精品偷伦视频免费观看了| 120秒男女动态视频免费| 亚洲日韩精品无码专区网站| 亚洲国产精品成人久久久| 无码人妻一区二区三区免费视频 | 色噜噜噜噜亚洲第一| 一级毛片aaaaaa免费看| 国产免费观看网站| 亚洲第一网站免费视频| a毛片全部播放免费视频完整18| xxxxx免费视频| 亚洲精品理论电影在线观看| 亚洲精品天堂成人片?V在线播放 | 精品无码专区亚洲| 久久久久亚洲AV成人网人人软件| 亚洲乱码日产精品一二三| 日韩在线永久免费播放| 亚洲一区二区三区播放在线| 久久久高清日本道免费观看| 免费va人成视频网站全| 亚洲国产区男人本色在线观看| 未满十八18禁止免费无码网站| 亚洲国产午夜精品理论片| 免费人成在线观看网站视频| 最近中文字幕免费大全| 四虎亚洲精品高清在线观看| 亚洲偷自拍拍综合网| 免费观看无遮挡www的视频| 老子影院午夜伦不卡亚洲|