Challenge: Super Humble Matrix

Subdomeniu: Combinatorics (combinatorics)

Scor cont: 40.0 / 40

Submission status: Accepted

Submission score: 1.0

Submission ID: 464738687

Limbaj: cpp14

Link challenge: https://www.hackerrank.com/challenges/super-humble-matrix/problem

Cerinta

Sherry likes matrices a lot, but her favorite ones are *humble matrices*. An $N \times M$ matrix (we'll call it $A$) is *humble* if:

- It contains all the elements in range $[1 , N \times M ]$ exactly once.
- For any $2$ elements $(i_1, j_1)$ and $(i_2, j_2)$ in matrix $A$:<br>
	If $i_1 + j_1 \lt i_2 + j_2$ , then $A_{i_1, j_1} \lt A_{i_2, j_2}$ should hold. 
    
Given $N$ and $M$, find and print the total number of possible humble matrices; as this number can be quite large, print your answer modulo $10^9+7$.

Input Format

Two space-separated integers, $N$ and $M$, respectively.

Output Format

Print the total number of humble matrices possible, modulo $10^9+7$.

**Sample Input 0**

    2 2
    
    
**Sample Output 0**

	2

**Sample Input 1**

    3 2
    
    
**Sample Output 1**

	4

Constraints

- $1 \le N,M \le 10^6$

**Scoring**

* $1 \le N,M \le 10^3$ for $30\%$ of the test data.  
* $1 \le N,M \le 10^6$ for $100\%$ of the test data.

Cod sursa

#include <iostream>
#include <vector>

using namespace std;


int main()
{
    int rows, columns; 
    cin >> rows >> columns;
    
    const int MOD = 1e9 + 7, MAX_SUM = rows + columns;
    vector <long long> factorial(MAX_SUM + 1); 
    factorial[0] = 1;
    for(int i = 1; i <= MAX_SUM; i++)
    {
        factorial[i] = (i*factorial[i - 1])%MOD;
    }
    
    long long no_of_ways = 1;
    for(int sum = 2; sum <= MAX_SUM; sum++)
    {
        int smallest_row = max(sum - columns, 1), largest_row = min(sum - 1, rows);
        int diagonal_size = largest_row - smallest_row + 1;
        long long no_of_ways_to_permute_diagonal = factorial[diagonal_size];
        
        no_of_ways *= no_of_ways_to_permute_diagonal;
        no_of_ways %= MOD;
    }

    cout << no_of_ways << "\n";
    return 0;
}
HackerRank Combinatorics – Super Humble Matrix