Please tell why it shows SIGFPE

I don’t think there would be any division by zero, or ‘long long int’ to ‘int’ conversion in the following code:
(the code was a my submission for BUTYPAIR in yesterday’s (31/07/2021) July Lunchtime contest)

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

long long int fact(long long int N)
{
    long long int fact = 1;
    if(N>1)
        for (long long int j = 2; j <= N; j++)
            fact *= j;

    return fact;

}

long long int permut(long long int n, long long int r)
{
    long long int res=(fact(n) / fact(n - r));
    return res;
}


int main() {
    // your code goes here
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    long long int t;
    cin >> t;
    for (long long int tc = 0; tc < t; tc++)
    {
        long long int n, input;
        long long int num_beauty_pairs;
        cin >> n;
        vector<long long int> arr;
        num_beauty_pairs = permut(n, 2);
        for (long long int i = 0; i < n; i++)
        {
            cin >> input;
            arr.push_back(input);
        }
        sort(arr.begin(), arr.end());
        long long int j = 1, count = 1;
        while (j < n)
        {
            if (arr[j - 1] == arr[j])
            {
                count++;
            }
            else
            {
                if(count>1)
                    num_beauty_pairs -= permut(count, 2);
                count = 1;
            }

            j++;
        }
        if (count > 1)
            num_beauty_pairs -= permut(count, 2);

        cout << num_beauty_pairs << "\n";

    }
    return 0;
}

Just consider the testcase where N=10^5 and the A_i's alternate between 1 and 2 like this.

1 Like

I got my mistake, thanks a lot

1 Like