0

I was trying to solve the hackerrank problem Between Two Sets.In the getTotalX() function of the code below,the output of the proggram is always empty (the count value always gives zero when I try to output it using cin). I can't understand the problem.Is there anything wrong with the declaration of the count variable?

    #include <bits/stdc++.h>

using namespace std;

string ltrim(const string &);
string rtrim(const string &);
vector<string> split(const string &);

/*
 * Complete the 'getTotalX' function below.
 *
 * The function is expected to return an INTEGER.
 * The function accepts following parameters:
 *  1. INTEGER_ARRAY a
 *  2. INTEGER_ARRAY b
 */

int getTotalX(vector<int> a, vector<int> b) {
    sort(a.begin(),a.end());
    sort(b.begin(),b.end());
    int n1 = a.back();
    int n2 = b.front();
    cout<<n1<<n2<<endl;
    int count=0;
    for(int i=n1;i<=n2;i+=n1)
    {
        int flag = 1;
        for(int j=0;j<a.size();j++ )
        {
            if (i % a[j])
            {
                flag =0;
                break;
            } 
        }
        if (flag)
        {
            for(int j=0;j<b.size();i++)
            {
                if (b[j]%i)
                {
                    flag = 0;
                    break;
                }
            }
        }
        if (flag)
            count++;
    }

    return count;
}

int main()
{
    ofstream fout(getenv("OUTPUT_PATH"));

    string first_multiple_input_temp;
    getline(cin, first_multiple_input_temp);

    vector<string> first_multiple_input = split(rtrim(first_multiple_input_temp));

    int n = stoi(first_multiple_input[0]);

    int m = stoi(first_multiple_input[1]);

    string arr_temp_temp;
    getline(cin, arr_temp_temp);

    vector<string> arr_temp = split(rtrim(arr_temp_temp));

    vector<int> arr(n);

    for (int i = 0; i < n; i++) {
        int arr_item = stoi(arr_temp[i]);

        arr[i] = arr_item;
    }

    string brr_temp_temp;
    getline(cin, brr_temp_temp);

    vector<string> brr_temp = split(rtrim(brr_temp_temp));

    vector<int> brr(m);

    for (int i = 0; i < m; i++) {
        int brr_item = stoi(brr_temp[i]);

        brr[i] = brr_item;
    }

    int total = getTotalX(arr, brr);

    fout << total << "\n";

    fout.close();

    return 0;
}

string ltrim(const string &str) {
    string s(str);

    s.erase(
        s.begin(),
        find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace)))
    );

    return s;
}

string rtrim(const string &str) {
    string s(str);

    s.erase(
        find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),
        s.end()
    );

    return s;
}

vector<string> split(const string &str) {
    vector<string> tokens;

    string::size_type start = 0;
    string::size_type end = 0;

    while ((end = str.find(" ", start)) != string::npos) {
        tokens.push_back(str.substr(start, end - start));

        start = end + 1;
    }

    tokens.push_back(str.substr(start));

    return tokens;
}

1 Answers1

1


Issues

  1. You are incrementing i inside inner for loops, but actually you are iterating, loop with variable j
  2. If flag==1 then you are incrementing count. But terminating whenever a number is divisible (that too any number in the array). This is against the hypothesis of the question

Hint
1. If you observe point 1 and 2 in the given question, those are just another way of saying definitions for LCM and GCD

Suggestions based on the code you have written
1. Read the question clearly and solve using pen and paper.
2. Analyze the complexity of your solution and try to improve it. Here you have applied sorting + two for loops
3. Please avoid using i, j, k these types of variables inside for loops. It is a very bad practice and more prone to errors.

venkat
  • 453
  • 4
  • 16
  • I deduced that it would be LCM and HCF after several attempts but was curious as to why the code above that I had written initially was not giving any output.I had actually incremented j but the error crept in somehow while pasting it here,still the code is not running.I am extremely sorry for that.I am new to stackoverflow.I will keep in mind to be more careful next time onwards. – Kaustavjit Saha May 10 '20 at 19:38