一道趣味數學演算法問題

flzhang發表於2017-02-17

需求 
光照照明高度是100000
一塊板子高度固定是50000
入射的點(0,50000) 判斷如下點是否在反射和折射線上。反射線按1:2長寬比例 ,折射是按2:1長寬比例。 求要寫多少次反射折射線
3<x,y<100000
蚊子即點的數量在0-30000之間


思路  x=2y+c  就是 題裡面的無數平行線 c就是偏移量,x平移後的位置。
 把給定點帶入公式,算出偏移量是否都一樣,一樣的就是一條線的,
 所有不一樣的值得個數就是需要的線的個數。


測試資料
3
4
1 50002
2 50002
2 49999
2 50004
6
823 50001
822 50002
823 50002
823 50003
823 50004
823 50004
4
1 99999
2 1
99999 99999
99999 1

#1 2
#2 3
#3 4

 *
 */

import java.util.Scanner;

public class Solution {

    static int N;
    static int[] x = new int[30000];
    static int[] y = new int[30000];
    static int T;
    static int AnswerN;
   
    public static void main(String[] args){
       
        Scanner c =  new Scanner(System.in);
        T = c.nextInt();
       
        for(int test_case=1; test_case<=T;test_case++){
           
            N = c.nextInt();
           
            for(int i=0;i<N;i++){
                x[i]=c.nextInt();
                y[i]=c.nextInt();
            }
           
            for(int i=0;i<N;i++){
                y[i] = y[i] - 50000;
                if(y[i]>0){
                    x[i] = x[i] - y[i]/2;
                    y[i] = 0;
                }
                else{
                    x[i] = x[i] + 2*y[i];
                    y[i] = 0;
                }
            }
           
            AnswerN = 1;
           
            for(int i=1;i<N;i++){
                boolean fit = false;
                for(int j=0;j<i;j++){
                    if(x[i]==x[j]&&y[i]==y[j]){
                        fit = true;
                        break;
                    }
                }
                if(!fit) AnswerN++;
            }
          
           System.out.println("#"+test_case+" "+AnswerN);
   
        }
       
    }
   
   
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750077/viewspace-2133720/,如需轉載,請註明出處,否則將追究法律責任。

相關文章