PROBLEM LINK:
Practice
Author: Rupanjan Hari
Tester: Rupanjan Hari
DIFFICULTY
: Easy
PREREQUISITES
: Math
QUICK EXPLANATION
You are given N sticks, 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 of N sticks, print the number of sticks that are left before each subsequent cut operations.
Note: For each cut operation, you have to recalculate the length of smallest sticks (excluding zero-length sticks).
EXPLANATION
To make the problem look easy, I have divided the program into functions of appropriate name.
Arrays:
arr[] - Primary array that receives the input size of each stick tag[] - The array that keeps a count on which sticks are being cut, once cut the tag[index] value changes to 1 otherwise 0Functions:
void cut(int a[],int n,int tag[]) - Cuts the sticks with the minimum value in the primary array that it receives through a[]. int min(int a[],int n,int tag[]) - Finds the minimum size among all the sticks. void count(int a[],int n) - Counts the no. of sticks cut. int equal(int a[], int n) - Operates the loop until all sticks are cut.
SOLUTION:
click here to see the solution