# Apple and Orange – HackerRank Solution ## Problem :

Sam’s house has an apple tree and an orange tree that yield an abundance of fruit. In the diagram below, the red region denotes his house, where `s` is the start point, and `t` is the endpoint. The apple tree is to the left of his house, and the orange tree is to its right. You can assume the trees are located on a single point, where the apple tree is at point `a`, and the orange tree is at point `b`.

When a fruit falls from its tree, it lands `d` units of distance from its tree of origin along the `x`-axis. A negative value of `d` means the fruit fell `d` units to the tree’s left, and a positive value of `d` means it falls `d` units to the tree’s right.

Given the value of `d` for `m` apples and `n` oranges, determine how many apples and oranges will fall on Sam’s house (i.e., in the inclusive range `[s, t]`)?

For example, Sam’s house is between `s` = 7 and `t` = 10. The apple tree is located at `a` = 4 and the orange at `b = 12`. There are `m = 3` apples and `n = 3` oranges. Apples are thrown `apples = [2, 3, -4]` units distance from `a`, and `oranges = [3, -2, -4]` units distance. Adding each apple distance to the position of the tree, they land at `[4 + 2, 4 + 3, 4 + -4] = [6, 7, 0]`. Oranges land at `[12 + 3, 12 + -2, 12 + -4] = [15, 10, 8]`. One apple and two oranges land in the inclusive range `7 - 10` so we print

``````1
2``````

### Function Description :

Complete the countApplesAndOranges function in the editor below. It should print the number of apples and oranges that land on Sam’s house, each on a separate line.

countApplesAndOranges has the following parameter(s):

• s: integer, starting point of Sam’s house location.
• t: integer, ending location of Sam’s house location.
• a: integer, location of the Apple tree.
• b: integer, location of the Orange tree.
• apples: integer array, distances at which each apple falls from the tree.
• oranges: integer array, distances at which each orange falls from the tree.

### Input Format :

The first line contains two space-separated integers denoting the respective values of `s` and `t`.
The second line contains two space-separated integers denoting the respective values of `a` and `b`.
The third line contains two space-separated integers denoting the respective values of `m` and `n`.
The fourth line contains `m` space-separated integers denoting the respective distances that each apple falls from point `a`.
The fifth line contains `n` space-separated integers denoting the respective distances that each orange falls from point `b`.

### Constraints :

• `1 <= s, t, a, b, m, n <= 105`
• `-105 <= d <= 105`
• `a < s < t < b`

### Output Format :

Print two integers on two different lines:

1. The first integer: the number of apples that fall on Sam’s house.
2. The second integer: the number of oranges that fall on Sam’s house.

### Sample Input 0 :

``````7 11
5 15
3 2
-2 2 1
5 -6``````

### Sample Output 0 :

``````1
1``````

## Solution :

``````#include <bits/stdc++.h>

using namespace std;

vector<string> split_string(string);

// Complete the countApplesAndOranges function below.
void countApplesAndOranges(int s, int t, int a, int b, vector<int> apples, vector<int> oranges) {
int count1 = 0, count2 = 0, sum1 = 0, sum2 = 0;
for (int i = 0; i < apples.size(); i++) {
if (apples[i] > 0) {
sum1 = a + apples[i];
if (sum1 >= s && sum1 <= t) {
count1++;
}
sum1 = 0;
} else if (apples[i] < 0) {
sum1 = a + apples[i];
if (sum1 >= s && sum1 <= t) {
count1++;
}
sum1 = 0;
}
}
cout << count1 << endl;

for (int i = 0; i < oranges.size(); i++) {
if (oranges[i] > 0) {
sum2 = b + oranges[i];
if (sum2 >= s && sum2 <= t) {
count2++;
}
sum2 = 0;
} else if (oranges[i] < 0) {
sum2 = b + oranges[i];
if (sum2 >= s && sum2 <= t) {
count2++;
}
sum2 = 0;
}
}
cout << count2 << endl;
}

int main()
{
string st_temp;
getline(cin, st_temp);

vector<string> st = split_string(st_temp);

int s = stoi(st);

int t = stoi(st);

string ab_temp;
getline(cin, ab_temp);

vector<string> ab = split_string(ab_temp);

int a = stoi(ab);

int b = stoi(ab);

string mn_temp;
getline(cin, mn_temp);

vector<string> mn = split_string(mn_temp);

int m = stoi(mn);

int n = stoi(mn);

string apples_temp_temp;
getline(cin, apples_temp_temp);

vector<string> apples_temp = split_string(apples_temp_temp);

vector<int> apples(m);

for (int i = 0; i < m; i++) {
int apples_item = stoi(apples_temp[i]);

apples[i] = apples_item;
}

string oranges_temp_temp;
getline(cin, oranges_temp_temp);

vector<string> oranges_temp = split_string(oranges_temp_temp);

vector<int> oranges(n);

for (int i = 0; i < n; i++) {
int oranges_item = stoi(oranges_temp[i]);

oranges[i] = oranges_item;
}

countApplesAndOranges(s, t, a, b, apples, oranges);

return 0;
}

vector<string> split_string(string input_string) {
string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) {
return x == y and x == ' ';
});

input_string.erase(new_end, input_string.end());

while (input_string[input_string.length() - 1] == ' ') {
input_string.pop_back();
}

vector<string> splits;
char delimiter = ' ';

size_t i = 0;
size_t pos = input_string.find(delimiter);

while (pos != string::npos) {
splits.push_back(input_string.substr(i, pos - i));

i = pos + 1;
pos = input_string.find(delimiter, i);
}

splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1));

return splits;
}
``````

1,001 total views,  7 views today