Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int MAXN = 2010;
  6. const int mod = 1000000007;
  7.  
  8. int memo[MAXN][MAXN][2];
  9. int bt(int a, int b, bool last) {
  10.     if (a < 0 || b < 0) return 0;
  11.     if (a == 0 && b == 0) return 1;
  12.     if (memo[a][b][last] != -1) return memo[a][b][last];
  13.     int &ret = memo[a][b][last];
  14.     ret = 0;
  15.     if (last) {
  16.         ret += (1LL * (b - 1) * bt(a, b - 1, false) + 1LL * a * bt(a - 1, b + 1, true)) % mod;
  17.         ret %= mod;
  18.     }
  19.     else {
  20.         ret += (1LL * a * bt(a - 1, b + 1, true) + 1LL * b * bt(a, b - 1, false)) % mod;
  21.         ret %= mod;
  22.     }
  23.     return ret;
  24. }
  25.  
  26. int main() {
  27.     memset(memo, -1, sizeof memo);
  28.     int q;
  29.     scanf("%d", &q);
  30.     while (q--) {
  31.         int n;
  32.         scanf("%d", &n);
  33.         int a = 0, b = 0;
  34.         set<int> st;
  35.         for (int i = 0; i < n; i++) {
  36.             int x;
  37.             scanf("%d", &x);
  38.             if (st.count(x)) {
  39.                 a++;
  40.             }
  41.             else {
  42.                 st.insert(x);
  43.             }
  44.         }
  45.         b = n - 2 * a;
  46.         int ans = 1LL * bt(a, b, false);
  47.         printf("%d\n", ans);
  48.     }  
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement