In this HackerEarth Leaderboard Standings problem solution, There were N submissions made in a programming contest containing infinite problems. Each submission earned the contestant 100 points as none of the submissions is wrong or a partial submission. You are given the details of the submissions - the username of the contestant and the time taken to solve the problem. Your task is to print the rank list according to the following rules:

The contestant with a higher score gets a higher rank.
If the scores are tied, then the contestant with the least sum of the time taken to solve the problems gets a higher rank.
In case of a tie in both scores and the sum of the time taken, they are ranked lexicographically according to their usernames.

HackerEarth Leaderboard Standings problem solution

HackerEarth Leaderboard Standings problem solution.

using namespace std;
#define ll long long
#define si(x) scanf("%d", &x)
#define sc(x) scanf("%c", &x)
#define sl(x) scanf("%lld", &x)
#define pl(x) printf("%lld\n", x)
#define pi(x) printf("%d\n", x)
#define gu getchar_unlocked
#define pu putchar_unlocked
#define setbits __builtin_popcountll
#define pb push_back
#define mp make_pair
#define MOD 1000000007
#define speed ios::sync_with_stdio(false)

struct newtype{
  int score;
  int time;
  string name;
typedef struct newtype node;

vector <node> v;
map < string, pair<int, int> > m;

bool cmp(node A, node B){
  if(A.score != B.score){
    return A.score > B.score;
  else if(A.time != B.time){
    return A.time < B.time;
    return <;

int main(){
  int n, i;
  for(i = 0; i < n; i++){
    string s; int t;
    cin>>s; si(t);
    auto it = m.find(s);
    if(it != m.end()){
      pair<int, int> P = it -> second;
      P.first += 100;
      P.second += t;
      m[s] = P;
      m[s] = mp(100, t);
  for(auto it = m.begin(); it != m.end(); it++){
    node N; = it -> first;
    N.score = (it -> second).first;
    N.time = (it -> second).second;
  sort(v.begin(), v.end(), cmp);
  for(i = 0; i < v.size(); i++){
    cout<<i + 1<<" "<<v[i].name<<endl;