Solution of 12068 - Harmonic Mean

Problem Description
source:https://uva.onlinejudge.org/external/120/12068.html

Input 

The first line of the input file contains an integer S (0 < S < 501), which indicates how many sets of inputs are there. Each of the next S lines contains one set of input. The description of each set is given below: Each set starts with an integer N (0 < N < 9), which indicates how many numbers are there in this set. This number is followed by N integers a1, a2, a3 . . . aN−1, aN (0 < ai < 101). 


Output 

For each set of input produce one line of output. This line contains the serial of output followed by two integers m and n separated by a front slash. These two numbers actually indicate that the harmonic mean of the given four numbers is m n . You must ensure that gcd(m, n) = 1 or in other words m and n must be relative prime. The value of m and n will fit into a 64-bit signed integer.

Sample Input 


4 1 2 3 4 
4 2 2 3 1 

Sample Output 

Case 1: 48/25 

Case 2: 12/7 


Solution :
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <deque>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#include<stdio.h>
#include<stdlib.h>

using namespace std;

long long int gcd(long long int a, long long int b)
{
    if(!b)return a;
    return gcd(b,a%b);
}
long long int lcd(long long int a, long long int b)
{
    long long int c;
    if(a>b)
    {
        c=a;
        a=b;
        b=c;
    }
return (a*b)/gcd(a,b);
}
int main()
{
    long long int t,i,j,n,sum,rlcd,a,nominator,dividor,value;

    while(scanf("%lld",&t)==1)
    {
        for(i=1;i<=t;i++)
        {
            scanf("%lld",&n);
            vector<long long int> myvector;
            a=1;
            sum=0;
            for(j=0;j<n;j++)
            {
                scanf("%lld",&value);
                myvector.push_back(value);
                rlcd=lcd(a,myvector[j]);
                a=rlcd;
            }
            for(j=0;j<n;j++)
                sum+=(rlcd/myvector[j]);
            nominator = (n*rlcd);

            while(gcd(nominator,sum)!=1)
            {
                dividor = gcd (nominator,sum);
                nominator/=dividor;
                sum/=dividor;
            }

            printf("Case %lld: %lld/%lld\n",i,nominator,sum);
        }
    }
    return 0;
}

No comments:

Post a Comment

Write your comment - Share Knowledge and Experience