poj 3101 Astronomy(分数的最小公倍数)
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(分数的最小公倍数)的更多相关文章
- poj 3101 Astronomy (java 分数的最小公倍数 gcd)
题目链接 要用大数,看了别人的博客,用java写的. 题意:求n个运动周期不完全相同的天体在一条直线上的周期. 分析:两个星球周期为a,b.则相差半周的长度为a*b/(2*abs(a-b)),对于n个 ...
- poj 3101 Astronomy
2个星球周期为a,b.则相差半周的长度为a*b/(2*abs(a-b)),对于n个只需求这n个 分数的最小公倍数即可! 公式: 分数的最小公倍数 = 分子的最小公倍数/分母的最大公约数 由于涉及到大数 ...
- poj3101--Astronomy(分数的最小公倍数)
题目链接:id=3101">点击打开链接 题目大意:有n个行星,给出每个行星的旋转的周期.问最少多少时间后n个行星会在一条直线上,初始点在一起,不存在全部的行星都有同一个周期 如果A行 ...
- hdu 1713求分数的最小公倍数
题意中的圈数和天数说反了 #include<stdio.h> __int64 gcd(__int64 a,__int64 b) {/* 比如4/3 3/5 通分20/15 9/15 所以这 ...
- POJ 3101 大数+gcd
题目大意: 星星作圆周运动的周期给出,若已连成一条线,下一次所有星星在同一条线上的时间 用分数形式输出 这里我们可以利用追及问题来计算出两个星星之间连成一条直线的时间,也即速度快的星星追上速度慢的星星 ...
- POJ 2976 01分数规划基础题目
题意: 给你一组"数",一共n个,每个数有两个权值,价钱a[i],代价b[i],让你选择n - k使得 sigma(a[i]) / sigma(b[i]) * 100 ...
- poj 3101Astronomy(圆周追击+分数最小公倍数)
/* 本题属于圆周追击问题: 假设已知两个圆周运动的物体的周期分别是a ,b, 设每隔时间t就会在同一条直线上 在同一条直线上的条件是 角度之差为 PI ! 那么就有方程 (2PI/a - 2PI/b ...
- POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】
题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total ...
- [转] POJ数学问题
转自:http://blog.sina.com.cn/s/blog_6635898a0100magq.html 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合 ...
随机推荐
- python web
[root@xen202 wbk]# python -m SimpleHTTPServerServing HTTP on 0.0.0.0 port 8000 ...
- IOT表优缺点
<pre name="code" class="html">IOT表是将所有东西都塞到叶块中,表就是索引,可以避免回表 首先,对于IOT而言,只有索 ...
- SQLite中如何用api操作BLOB类型的字段
在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等.对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此SQLite提供了一组函数来处理 ...
- js错误 SyntaxError: missing : after property id
在用jquery的post方法时 $.post('adminCheckTpmisPlans.do',{'test',str},function(f){ ... }) 报如下错误 SyntaxError ...
- GNU GPL介绍
怎样在程序中使用GNU许可证 不管使用哪种许可证,使用时须要在每一个程序的源文件里加入两个元素:一个版权声明和一个复制许可声明.说明该程序使用GNU许可证进行授权.另外在声明版权前应该说明 ...
- 使用ffmpeg 对视频截图,和视频转换格式
//执行CMD命令方法 public static void CmdProcess(string command)//调用CMD { //实例化一个进程类 ...
- [Android代码阅读]分类简介
分类简介: 阅读他人的代码,可以学到很多东西,从思路,到方案,一系列都可以在项目代码中体现,所以,此分类专门用于记录阅读过的项目代码,并在上面给出自己的理解和注释 在此,感谢原作者开源分享项目代码
- 【iOS开发-71】解决方式:Attempting to badge the application icon but haven't received permission from the...
(1)原因 一切都是iOS8捣的鬼.您假设把模拟器换成iOS7.1或者更早的,就不会有这个问题.而如今在iOS8中要实现badge.alert和sound等都需要用户允许才干,由于这些都算做Notif ...
- BZOJ 2809 APIO2012 dispatching Treap+启示式合并 / 可并堆
题目大意:给定一棵树,选定一棵子树中的一些点,薪水和不能超过m,求点的数量*子树根节点的领导能力的最大值 考虑对于每一个节点,我们维护一种数据结构,在当中贪心寻找薪金小的雇佣. 每一个节点暴力重建一定 ...
- g++编C++11/C++0x遇到的问题
在看<Cplusplus Concurrency In Action Practical Multithreading>当遇到第一个样品: #include<iostream> ...