HACKER RANK Algorithms - Implementation - Cut the Sticks - Solution.'C++'

                   Algorithms - Implementation - Cut the Sticks - Solution
Problem Statement
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 nextcut 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 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 N
The next line contains N integers: a0, a1,...aN-1 separated by space, where ai represents the length of ith stick.
Output Format 
For each operation, print the number of sticks that are cut, on separate lines.
Constraints 
1 ≤ N ≤ 1000 
1 ≤ ai ≤ 1000
Sample Input #00
6
5 4 4 2 2 8
Sample Output #00
6
4
2
1
Sample Input #01
8
1 2 3 4 3 3 2 1
Sample Output #01
8
6
4
1
Explanation
Sample Case #00 :
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 #01
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

Solution:

#include <algorithm>  
 #include <iostream>  
 #include <climits>  
 using namespace std;  
 int main()  
 {  
   int n,i,j,k,min= INT_MAX,max,st,en,arr[10000],flag ;  
   cin>>n;  
   for(i=0;i<n;i++){  
     cin>>arr[i];  
     if( min>arr[i])  
       {  
       min = arr[i];  
     }  
   }  
    
   do{  
     int count= 0,nmin=INT_MAX;  
     flag =0;  
     for(i=0;i<n;i++)  
       {  
       if(arr[i]>0){  
       arr[i] = arr[i] - min;  
         count++;  
       }  
       //cout<< arr[i]<<" ";  
       if(arr[i]>0 )  
         {  
         flag =1;  
         if(nmin>arr[i])  
           nmin = arr[i];  
       }  
     }  
     min = nmin;  
     cout<<count<<endl;  
   }while(flag>0);  
   return 0;  
}

Thanks for Visiting, Hope this helps you....

Comments

Popular Posts