<p>There are <code>n</code> persons on a social media website. You are given an integer array <code>ages</code> where <code>ages[i]</code> is the age of the <code>i<sup>th</sup></code> person.</p>

<p>A Person <code>x</code> will not send a friend request to a person <code>y</code> (<code>x != y</code>) if any of the following conditions is true:</p>

<ul>
	<li><code>age[y] &lt;= 0.5 * age[x] + 7</code></li>
	<li><code>age[y] &gt; age[x]</code></li>
	<li><code>age[y] &gt; 100 &amp;&amp; age[x] &lt; 100</code></li>
</ul>

<p>Otherwise, <code>x</code> will send a friend request to <code>y</code>.</p>

<p>Note that if <code>x</code> sends a request to <code>y</code>, <code>y</code> will not necessarily send a request to <code>x</code>. Also, a person will not send a friend request to themself.</p>

<p>Return <em>the total number of friend requests made</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> ages = [16,16]
<strong>Output:</strong> 2
<strong>Explanation:</strong> 2 people friend request each other.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> ages = [16,17,18]
<strong>Output:</strong> 2
<strong>Explanation:</strong> Friend requests are made 17 -&gt; 16, 18 -&gt; 17.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> ages = [20,30,100,110,120]
<strong>Output:</strong> 3
<strong>Explanation:</strong> Friend requests are made 110 -&gt; 100, 120 -&gt; 110, 120 -&gt; 100.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>n == ages.length</code></li>
	<li><code>1 &lt;= n &lt;= 2 * 10<sup>4</sup></code></li>
	<li><code>1 &lt;= ages[i] &lt;= 120</code></li>
</ul>

#include <vector>
#include <algorithm> // for std::max

class Solution {
public:
    int numFriendRequests(std::vector<int>& ages) {
        std::vector<int> count(121, 0); // To count occurrences of each age (1 to 120)
        int result = 0;
        
        // Count occurrences of each age
        for (int age : ages) {
            count[age]++;
        }
        
        // Calculate friend requests
        for (int ageA = 1; ageA <= 120; ++ageA) {
            if (count[ageA] > 0) {
                for (int ageB = 1; ageB <= 120; ++ageB) {
                    if (count[ageB] > 0) {
                        // Check the conditions for sending a friend request
                        if (ageB <= 0.5 * ageA + 7) {
                            continue;
                        }
                        if (ageB > ageA) {
                            continue;
                        }
                        // Calculate requests
                        if (ageA == ageB) {
                            // If ages are the same, count the pairs within the same age group
                            result += count[ageA] * (count[ageA] - 1); // A person can't send a request to themselves
                        } else {
                            // Different ages
                            result += count[ageA] * count[ageB];
                        }
                    }
                }
            }
        }
        
        return result;
    }
};

39800