# Relative Ranks in C++

C++Server Side ProgrammingProgramming

Suppose we have a list of scores of N athletes, we have to find their relative ranks and the people with the top three highest scores, who will be different medals: "Gold", "Silver" and "Bronze".

So, if the input is like [2,5,3,1,0], then the output will be [Bronze,Gold,Silver,4,5]

To solve this, we will follow these steps −

• if size of nums is same as 1, then −

• return "Gold"

• if size of nums is same as 2, then −

• if nums > nums, then −

• return "Gold", "Silver"

• Otherwise

• return "Silver", "Gold"

• Define an array v

• DDefine an array vec

• for initialize i := 0, when i < size of nums, update (increase i by 1), do −

• insert nums[i] at the end of v

• sort the array v

• reverse the array v

• Define one map mp

• if size of nums > 2, then −

• insert {v, "Gold" } into mp

• insert {v, "Silver" } into mp

• insert {v, "Bronze" } into mp

• for initialize i := 3, when i < size of v, update (increase i by 1), do −

• insert { v[i], i + 1 as string} into mp

• for initialize i := 0, when i < size of nums, update (increase i by 1), do −

• insert mp[nums[i]] at the end of vec

• return vec

## Example

Let us see the following implementation to get better understanding −

Live Demo

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << v[i] << ", ";
}
cout << "]"<<endl;
}
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& nums){
if (nums.size() == 1){
return { "Gold" };
}
if (nums.size() == 2){
if (nums > nums)
return { "Gold", "Silver" };
else
return { "Silver", "Gold" };
}
vector<int> v;
vector<string> vec;
for (int i = 0; i < nums.size(); i++)
v.push_back(nums[i]);
sort(v.begin(), v.end());
reverse(v.begin(), v.end());
map<int, string> mp;
if (nums.size() > 2) {
mp.insert({v, "Gold" });
mp.insert({v, "Silver" });
mp.insert({v, "Bronze" });
for (int i = 3; i < v.size(); i++) {
mp.insert({ v[i], to_string(i + 1) });
}
for (int i = 0; i < nums.size(); i++)
vec.push_back(mp[nums[i]]);
}
return vec;
}
};
main(){
Solution ob;
vector<int> v = {2,5,3,1,0};
print_vector(ob.findRelativeRanks(v));
}

## Input

{2,5,3,1,0}

## Output

[Bronze, Gold, Silver, 4, 5, ]