In this

**HackerEarth Roy and Trending Topics problem solution**, Roy is trying to develop a widget that shows Trending Topics (similar to Facebook) on the home page of HackerEarth Academy.He has gathered a list of N Topics (their IDs) and their popularity score (say z-score) from the database. Now z-score change every day according to the following rules:

- When a topic is mentioned in a 'Post', its z-score is increased by 50.
- A 'Like' on such a Post, increases the z-score by 5.
- A 'Comment' increases the z-score by 10.
- A 'Share' causes an increment of 20.

Now the Trending Topics are decided according to the change in z-score. One with the highest increment comes on top and the list follows.

Roy seeks your help to write an algorithm to find the top 5 Trending Topics.

If a change in z-score for any two topics is the same, then rank them according to their ID (one with higher ID gets priority). It is guaranteed that IDs will be unique.

## HackerEarth Roy and Trending Topics problem solution.

`#include <iostream>`

#include <cstdio>

#include <vector>

#include <algorithm>

#include <utility>

#include <map>

using namespace std;

vector < pair<long long, long long> > topics;

map<long long,long long> id_zscore_map;

int main()

{

int n;

long long id, z, p, l, c, s;

scanf(" %d",&n);

for(int i=0;i<n;i++)

{

scanf(" %lld %lld %lld %lld %lld %lld",&id,&z,&p,&l,&c,&s);

topics.push_back(make_pair( (p*50 + l*5 + c*10 + s*20 - z) , id));

id_zscore_map[id] = z;

}

make_heap(topics.begin(), topics.end());

for(int i=0;i<5;i++)

{

printf("%lld %lld\n",topics.front().second, id_zscore_map[topics.front().second] + topics.front().first);

pop_heap (topics.begin(),topics.end()); topics.pop_back();

}

return 0;

}

## 0 Comments