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 integerN .
The next line containsN integers: a0, a1,...aN-1 separated by space, where ai represents the length of ith stick.
The first line contains a single integer
The next line contains
Output Format
For each operation, print the number of sticks that are cut, on separate lines.
For each operation, print the number of sticks that are cut, on separate lines.
Constraints
1 ≤ N ≤ 1000
1 ≤ ai ≤ 1000
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;
}
#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;
}
Comments
Post a Comment