Cut the Sticks

You are givensticks, where the_length_of each stick is a positive integer. A_cut operation_is performed on the sticks such that all of them are reduced by the length of the smallest stick.

Suppose we have six sticks of the following lengths:

5 4 4 2 2 8

Then, in one_cut operation_we make a cut of length_2_from each of the six sticks. For the next_cut operation_four sticks are left (of non-zero length), whose lengths are the following:

3 2 2 6

The above step is repeated until no sticks are left.

Given the length ofsticks, print the number of sticks that are left before each subsequentcut operations.

Note:_For each_cut operation, you have to recalcuate the length of smallest sticks (excluding zero-length sticks).

Input Format The first line contains a single integer. The next line containsintegers:_a0, a1,...aN-1_separated by space, whererepresents the length of thestick.

Output Format For each operation, print the number of sticks that are cut, on separate lines.

Constraints

  • Sample Input 0

6
5 4 4 2 2 8

Sample Output 0

6
4
2
1

Sample Input 1

8
1 2 3 4 3 3 2 1

Sample Output 1

8
6
4
1

Explanation

Sample Case 0 :

sticks-length        length-of-cut   sticks-cut
5 4 4 2 2 8             2               6
3 2 2 _ _ 6             2               4
1 _ _ _ _ 4             1               2
_ _ _ _ _ 3             3               1
_ _ _ _ _ _           DONE            DONE

Sample Case 1

sticks-length         length-of-cut   sticks-cut
1 2 3 4 3 3 2 1         1               8
_ 1 2 3 2 2 1 _         1               6
_ _ 1 2 1 1 _ _         1               4
_ _ _ 1 _ _ _ _         1               1
_ _ _ _ _ _ _ _       DONE            DONE
#include <bits/stdc++.h>

using namespace std;

vector <int> cutTheSticks(vector <int> arr) {
    // Complete this function
    vector<int > freq (1001 , 0);
    for(int i = 0; i < arr.size(); i++){
        freq[arr[i]] +=1;
    }
    vector<int> ans; 
    int count = 0;
    for(int i = freq.size() - 1; i >= 0; i--){
        if(freq[i] > 0) {
            count += freq[i];
            ans.push_back(count);
        }
    }
    reverse(ans.begin(), ans.end());

    return ans;
}

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for(int arr_i = 0; arr_i < n; arr_i++){
       cin >> arr[arr_i];
    }
    vector <int> result = cutTheSticks(arr);
    for (ssize_t i = 0; i < result.size(); i++) {
        cout << result[i] << (i != result.size() - 1 ? "\n" : "");
    }
    cout << endl;


    return 0;
}

Last updated

Was this helpful?