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);
} }





poj 3101 Astronomy(分数的最小公倍数)的更多相关文章

  1. poj 3101 Astronomy (java 分数的最小公倍数 gcd)

    题目链接 要用大数,看了别人的博客,用java写的. 题意:求n个运动周期不完全相同的天体在一条直线上的周期. 分析:两个星球周期为a,b.则相差半周的长度为a*b/(2*abs(a-b)),对于n个 ...

  2. poj 3101 Astronomy

    2个星球周期为a,b.则相差半周的长度为a*b/(2*abs(a-b)),对于n个只需求这n个 分数的最小公倍数即可! 公式: 分数的最小公倍数 = 分子的最小公倍数/分母的最大公约数 由于涉及到大数 ...

  3. poj3101--Astronomy(分数的最小公倍数)

    题目链接:id=3101">点击打开链接 题目大意:有n个行星,给出每个行星的旋转的周期.问最少多少时间后n个行星会在一条直线上,初始点在一起,不存在全部的行星都有同一个周期 如果A行 ...

  4. hdu 1713求分数的最小公倍数

    题意中的圈数和天数说反了 #include<stdio.h> __int64 gcd(__int64 a,__int64 b) {/* 比如4/3 3/5 通分20/15 9/15 所以这 ...

  5. POJ 3101 大数+gcd

    题目大意: 星星作圆周运动的周期给出,若已连成一条线,下一次所有星星在同一条线上的时间 用分数形式输出 这里我们可以利用追及问题来计算出两个星星之间连成一条直线的时间,也即速度快的星星追上速度慢的星星 ...

  6. POJ 2976 01分数规划基础题目

    题意:       给你一组"数",一共n个,每个数有两个权值,价钱a[i],代价b[i],让你选择n - k使得 sigma(a[i]) / sigma(b[i]) * 100 ...

  7. poj 3101Astronomy(圆周追击+分数最小公倍数)

    /* 本题属于圆周追击问题: 假设已知两个圆周运动的物体的周期分别是a ,b, 设每隔时间t就会在同一条直线上 在同一条直线上的条件是 角度之差为 PI ! 那么就有方程 (2PI/a - 2PI/b ...

  8. POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】

    题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total ...

  9. [转] POJ数学问题

    转自:http://blog.sina.com.cn/s/blog_6635898a0100magq.html 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合 ...

随机推荐

  1. [黑马程序员] I/O

    ---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. IO流概述: Java对数据的 ...

  2. paip.odbc DSN的存储与读取

    paip.odbc DSN的存储与读取 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/atti ...

  3. js传真实地址 C:\fakepath

    js给action传真是地址的时候,处于安全,传到action中 浏览器会改变路径变为C:\fakepath\ftp.txt,但是原始路径却是 C:\Documents and Settings\Ad ...

  4. 理解 Thread.Sleep 函数

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 假设现在是 2008-4-7 12:00:00.000,如果我调用 ...

  5. linux下安装node.js

    1.下载 wget http://nodejs.org/dist/v0.10.32/node-v0.10.32-linux-x64.tar.gz 2.解压 tar -xvf node-v0.10.32 ...

  6. 解决Andriod使用HttpURLConnection 失败问题

    在Android的Activity中使用HttpURLConnection连接到服务端时抛出异常,Access denied.第一个想到是权限问题.然后就尝试将INTERNET权限加上:在Manife ...

  7. ZOJ 3542 2011大连现场赛D题(简单模拟)

    Hexadecimal View Time Limit: 2 Seconds       Memory Limit: 65536 KB Hexadecimal is very important an ...

  8. Android图片与旋转

    拍照后的照片有时被系统旋转,纠正过程例如以下: 1.先读取图片文件被旋转的角度: /** * 通过ExifInterface类读取图片文件的被旋转角度 * @param path : 图片文件的路径 ...

  9. linux在下面APK反编译软件和过程的描述

    需要的工具: 1.apktool apk打包工具 下载地址:http://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2 安装:直接 ...

  10. 经常使用Firefox插件大全

    Web开发者经常使用的火狐插件 1)FireShot:是一个截图工具,来源于截图软件Screenshot Studio的开发商,是一个Firefox扩展或者说是Firefox版的Screenshot ...