| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
传说要用大整数In Reply To:这样的思路有什么错? Posted by:bmexue at 2006-11-23 00:45:01 > 让周期时间d[i]从小到大排序,周期时间相同的合并成一个点,最后还剩N个两两周期不同的行星。
>
> 那么相邻两个行星的产生半圈的距离差所需时间为T[i] = d[i]*d[i+1] / (d[i+1]-d[i])*2;
> 这样就可以产生N-1个T[i],求出这个N-1个T[i-1]的最小公倍数。
>
> 就这样是在想不出那里有错,谁能指出来思路哪里错了。
> 我的代码:
> #include <iostream>
> #include <algorithm>
> using namespace std;
>
> struct Data
> {
> int numerator ,denominator ;
> };
> int d[1001],n,N;
> int T[1001];
> Data dp[1001];
>
> int gcd(int a, int b)
> {
> int tmp;
> if(a<b)
> {
> tmp = a;
> a= b;
> b= tmp;
> }
> while(true){
> if(a%b ==0)
> break;
> tmp =a%b;
> a = b;
> b = tmp;
> }
> return b;
> }
> int mul(int a, int b)
> {
> int g = gcd(a,b);
> b = b/g;
> return a*b;
> }
> void Mylest(int n1, int d1, int n2, int d2, int &rstN, int &rstD)
> {
> rstN = mul(n1,n2);
> rstD = gcd(d1,d2);
> }
> void work(int i)
> {
>
> dp[i].numerator = T[i]*T[i+1];
> dp[i].denominator = (T[i+1]-T[i])*2;
>
> int g = gcd(dp[i].denominator,dp[i].numerator);
>
> dp[i].numerator = dp[i].numerator/g;
> dp[i].denominator=dp[i].denominator/g;
>
> }
> int main()
> {
> //freopen("C:\\ACMData.txt","r",stdin);
>
> scanf("%d",&n);
> int i=0;
> while(i<n){
> scanf("%d",&d[i]);
> i++;
> }
> sort(d,d+n);
>
> N=0; i=0;
> T[N] = d[i]; i++;N++;
> while( i<n){
> if( d[i] == d[i-1]){
> i++; continue;
> }
> else{
> T[N] = d[i];
> N++; i++;
> }
> }
> i=0;
> while(i<N-1){
> work(i);
> i++;
> } //算法应该没错,难道是哪里没想到!!!!
>
> int numerator = dp[0].numerator;
> int denominator = dp[0].denominator;
> i=1; //N个有效点 那么就只有N-1个相邻“最小半圈时间差”
> while(i<N-1) //Çó×îС¹«±¶Êý
> {
> Mylest(numerator,denominator,dp[i].numerator,dp[i].denominator,numerator,denominator);
> i++;
> }
>
> int g= gcd(numerator,denominator);
> numerator = numerator/g;
> denominator=denominator/g;
>
> printf("%d %d\n",numerator,denominator);
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator