zoukankan      html  css  js  c++  java
  • poj 3101 Astronomy(分数的最小公倍数)

    http://poj.org/problem?

    id=3101


    大致题意:求n个运动周期不全然同样的天体在一条直线上的周期。


    这题我是看解题报告写的,没想到选用參照物,用到了物理中的角速度什么的。


    由于n个天体的周期已知,那么它们的角速度为vi = 2*pi/Ti,若统一选第0个天体为參照物,那么其余天体的相对速度vi' = 

    2*pi*(T0-Ti)/(T0*Ti)(把周期T同样的天体合为一个天体)。则与第0个天体角度相差180度的时间为ti = (T0*Ti)/((T0-Ti)*2)。

    那么求得全部ti的最小公倍数就是答案。


    最终到重点了。ti作为分数,它们的最小公倍数定义为 : 全部分子的最小公倍数/全部分母的最大公约数数。

    因为N太大,须要用大数处理。

    又各种百度java。最终A啦。 两点了,洗洗睡吧。


    import java.math.*;
    import java.util.*;
    import java.io.*;
    
    public class Main {
    	public static int [] t = new int [1200];
    	public static int [] tt = new int [1200];
    	
    	public static BigInteger [] fz = new BigInteger [1200];
    	public static BigInteger [] fm = new BigInteger [1200];
    	
    	public static int gcd(int a, int b){
    		if(b == 0)
    			return a;
    		return gcd(b,a%b);
    	}
    	
    	public static void main(String[] args) {
    		int n,m;
    		Scanner cin = new Scanner(System.in);
    		n = cin.nextInt();
    		
    		for(int i = 0; i < n; i++)
    			t[i] = cin.nextInt();
    		
    		Arrays.sort(t,0,n); //java中对数组的排序方法
    		m = 0;
    		tt[m++] = t[0];
    		for(int i = 1; i < n; i++){ //把周期同样的缩点
    			if(t[i] != t[i-1]){
    				tt[m++] = t[i];
    			}
    		}
    		
    		for(int i = 1; i < m; i++){
    			int a = tt[i] * tt[0];
    			int b = 2*(tt[i] - tt[0]);
    			int g = gcd(a,b);
    			fz[i] = BigInteger.valueOf(a/g);
    			fm[i] = BigInteger.valueOf(b/g);
    		}
    		BigInteger t1 = fz[1],t2 = fm[1];
    		
    		for(int i = 2; i < m; i++){
    			BigInteger aa = t1.multiply(fz[i]);
    			BigInteger gg = t1.gcd(fz[i]);
    			t1 = aa.divide(gg);
    			
    			t2 = t2.gcd(fm[i]);
    			
    		}
    		System.out.println(t1 + " " + t2);
    	}
    	
    }
    




  • 相关阅读:
    REST framework框架的基本组件
    GIT如何根据历史记录回退代码
    如何查看磁盘存储空间
    git免密拉取代码
    windows好用的cmd命令
    git如何新建分支
    screen命令
    解决windows配置visual studio code调试golang环境问题
    转载一篇棒棒的AWK教程
    解决Creating Server TCP listening socket 54.179.160.162:7001: bind: Cannot assign requested address
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5146578.html
Copyright © 2011-2022 走看看