Queue
There is a queue with N people. Every person has a different heigth. We can see P people, when we are looking from the beginning, and R people, when we are looking from the end.It�s because they are having different height and they are covering each other. How many different permutations of our queue has such a interesting feature?
Input Specification
The input consists of T test cases. The number of them (1<=T<=10000) is given on the first line of the input file.
Each test case consists of a line containing three integer numbers: N that indicates the number of people in a queue (1 <= N <= 13), and then two more integers. The first corresponds to the number of people, that we can see looking from the beginning, and the second �corresponding to the number of people, that we can see looking from the end.
Output Specification
For every test case your program has to determine one integer. Print how many permutations of N people we can see exactly P people from the beginning, and R people, when we are looking from the end.
Sample Input
3
10 4 4
11 3 1
3 1 2
Output for the Sample Input
90720
1026576
1
#include<cstdio>
#include<map>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<list>
#include<set>
#include<cmath>
using namespace std;
const int maxn = 10 + 5;
const long long INF = 1e12;
const double eps = 1e-6;
typedef unsigned long long ULL;
typedef long long LL;
typedef pair<int, int> P;
#define fi first
#define se second
LL dp[maxn][maxn][maxn];
void pre(){
memset(dp, 0, sizeof dp);
dp[1][1][1] = 1;
for(int i = 1;i < 13;i++){
for(int j = 1;j <= i;j++){
for(int k = 1;k <= i;k++){
dp[i+1][j+1][k] += dp[i][j][k];
dp[i+1][j][k+1] += dp[i][j][k];
dp[i+1][j][k] += (i-1)*dp[i][j][k];
}
}
}
}
int main(){
pre();
int t;
cin >> t;
while(t--){
int n, p, r;
cin >> n >> p >> r;
cout << dp[n][p][r] << endl;
}
return 0;
}