Count Unhappy Friends

You are given a list of preferences for n friends, where n is always even.

For each person ipreferences[i] contains a list of friends sorted in the order of preference. In other words, a friend earlier in the list is more preferred than a friend later in the list. Friends in each list are denoted by integers from 0 to n-1.

All the friends are divided into pairs. The pairings are given in a list pairs, where pairs[i] = [xi, yi] denotes xi is paired with yi and yi is paired with xi.

However, this pairing may cause some of the friends to be unhappy. A friend x is unhappy if x is paired with y and there exists a friend u who is paired with v but:

  • x prefers u over y, and
  • u prefers x over v.

Return the number of unhappy friends.

Example:

Input: n = 4, preferences = [[1, 2, 3], [3, 2, 0], [3, 1, 0], [1, 2, 0]], pairs = [[0, 1], [2, 3]]
Output: 2
Explanation:
Friend 1 is unhappy because:
- 1 is paired with 0 but prefers 3 over 0, and
- 3 prefers 1 over 2.
Friend 3 is unhappy because:
- 3 is paired with 2 but prefers 1 over 2, and
- 1 prefers 3 over 0.
Friends 0 and 2 are happy.

Approach:

C++

#include <bits/stdc++.h>
using namespace std;

int unhappyFriends(int nvector<vector<int>> &preferences,
 vector<vector<int>> &pairs)
{
    vector<vector<int>> scores(nvector<int>(n0));
    for (int i = 0i < n; ++i)
    {
        for (int j = 0j < n - 1; ++j)
        {
            scores[i][preferences[i][j]] = n - 1 - j;
        }
    }

    vector<intdict(n, -1);
    for (int i = 0i < pairs.size(); i++)
    {
        dict[pairs[i][0]] = pairs[i][1];
        dict[pairs[i][1]] = pairs[i][0];
    }

    int res = 0;
    for (int x = 0x < n; ++x)
    {
        int y = dict[x];
        for (int u = 0u < n; ++u)
        {
            if (scores[x][y] < scores[x][u])
            {
                int v = dict[u];
                if (scores[u][v] < scores[u][x])
                {
                    res++;
                    break;
                }
            }
        }
    }
    return res;
}

int main()
{
    int n = 4;
    vector<vector<int>> preferences = {{123},
                                       {320},
                                       {310},
                                       {120}};

    vector<vector<int>> pairs = {{01}, {23}};

    cout << unhappyFriends(npreferencespairs);

    return 0;
}


No comments:

Post a Comment